Date、DateFormat、Calendar、Math、System、包装类、正则表达式

 

Date:

* 在java中如何表示一个时间对象呢?
* 需要使用到Date类,在java.util包下面;
* 使用步骤:
* 1. 导入包: import java.util.Date;
* 2. 创建对象,使用构造方法
* public Date();// 创建一个默认的当前时间点的日期对象.
* public Date(long time);// 根据指定的毫秒值创建日期对象
*
* 3. 使用成员方法:
* public void setTime(long time);// 为当前日期设置毫秒值
* public long getTime();// 获取日期对象的毫秒值
*
* 注意点:
* 1. Date类对象进行输出的时候,显示的不是地址值,说明已经覆盖了toString方法
* 2. 中国属于世界的东八区,默认的时间是: 1970年1月1日8:00
* 3. 世界的默认时间是格林尼治时间(英国南郊): 1970年1月1日0:00

public class Demo01Date {

public static void main(String[] args) {

//1.创建对象Date
Date date = new Date();
System.out.println(date);//Wed Dec 27 09:00:29 CST 2017

Date date2 = new Date(0L);
System.out.println(date2);//Thu Jan 01 08:00:00 CST 1970

System.out.println("=========");

//2.成员方法
//public long getTime();// 获取日期对象的毫秒值
System.out.println(date.getTime() / 1000 / 60 / 60 / 24 / 365);// 48年
System.out.println(date2.getTime());// 0
System.out.println("======");

// public void setTime(long time);// 设置毫秒值
// 练习: 获取明天的此时此刻
date.setTime(date.getTime() + 24 * 60 * 60 * 1000);
System.out.println(date);

}
}

 

 

 

DateFormat:
* 如何直接使用Date日期来表示时间,默认的时间,可读性不好,可是使用DateFormat来进行格式化.
* DateFormat: 表示时间格式化的类, 在java.text包下面;
* 由于DateFormat是一个抽象类,不能直接创建对象, 所以需要使用到子类: SimpleDateFormat;
*
* 使用步骤:
* 1. 导入包: import java.text.SimpleDateFormat; /DateFormat
* 2. 创建对象,使用构造方法:
* public SimpleDateFormat(String pattern);
* pattern: 可以传入指定的格式: "yyyy年MM月dd日 HH时mm分ss秒";
* 3. 使用成员方法
* public String format(Date date);// 将日期对象转成字符串
* public Date parse(String strTime);// 将字符串转成日期对象

package cn.itcast.demo02;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
//计算一个人活了多少天?
public class Demo03DatePractice {
public static void main(String[] args) throws ParseException {
String birthStr = "1995年09月16日";
DateFormat df = new SimpleDateFormat("yyyy年MM年dd月");
Date date1 = df.parse(birthStr);
Date date2 = new Date();
long day = (date2.getTime() - date1.getTime()) / 1000 / 60 / 60 / 24;
System.out.println("已经存活了" + day + "天");
}

}

 

或者

package cn.itcast.fudao02;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

// 请使用代码实现:计算你活了多少天
public class demo01 {
public static void main(String[] args) {
try {
// a)把你生日的字符串,转换为日期对象
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date birthDay = df.parse("1999-09-09");
// b)把日期对象转换为对应的毫秒值
System.out.println(birthDay);
long birthTime = birthDay.getTime();
// c)获取当前系统的毫秒值
long now = System.currentTimeMillis();//调用sysytem的方法,获取当前系统的毫秒值
// d)当前系统毫秒值-出生时间对于的毫秒值计算你活的毫秒值
long liveTime = now - birthTime;
// e)把你活毫秒值转换为天
long day = liveTime / 1000 / 60 / 60 / 24;
// f)输出天数
System.out.println("活了" + day + "天");
} catch (ParseException e) {
e.printStackTrace();
}
}
}

  

 Calendar:
* 如果使用Date没有办法很好的表示,今天是今年的多少天,本周是今年的多少周...等等信息
* 如果需要表示的更加丰富,可以使用Calendar, 在java.util包下面;
* Calendar类: 表示日历对象的一个类,是一个抽象类没有办法创建对象,需要用到子类,在java.util.Calendar;
*
* 使用步骤:
* 1. 导入包: import java.util.Calendar;
* 2. 创建对象,使用构造方法
* 由于Calendar是抽象类,可以使用子类: GregorianCalendar
* 3. 使用成员方法;
* public static Calendar getInstance();// 静态方法,也可以获取一个日历对象(推荐使用)
* public Date getTime();// 获取日期对象
* public int get(int field);// field指的是字段信息(在Calendar中的字段(静态成员变量)里面)
* public void set(int field, int value);// 设置某一个字段为具体的值
* public void set(int year, int month, int day);// 设置具体的年月日
* public void add(int field, int amout);// 将某个字段对应的日期移动(增加或者减少)
*
* 注意:
* 获取月份表示范围是[0,11]表示[1,12]月份

public class Demo04Calendar {

public static void main(String[] args) {

//1. 创建对象
//Calendar c = new GregorianCalendar();
//System.out.println(c);

//2. public static Calendar getInstance();
// 静态方法,也可以获取一个日历对象(推荐使用)
Calendar c2 = Calendar.getInstance();
//System.out.println(c2);

//3. public Date getTime(); 获取一个日期对象
Date date = c2.getTime();
System.out.println(date); //Wed Dec 27 10:02:45 CST 2017
System.out.println(new Date());

System.out.println("======");

//4. public int get(int field);
// field指的是静态字段信息(在Calendar中的字段里面)
System.out.println(c2.get(Calendar.YEAR) + "年");
System.out.println(c2.get(Calendar.MONTH) + 1 + "月");// 月份获取的是[0,11]表示[1,12]月份
System.out.println(c2.get(Calendar.DAY_OF_MONTH) + "日");

//5. public void set(int field, int value);
// 设置某一个字段为具体的值
c2.set(Calendar.YEAR, 2018);// 将年份改成2018年
c2.set(Calendar.MONTH, 9);// 设置成10月份
System.out.println(c2.getTime());// 获取的是日历里面的日期对象
System.out.println("=======");

//6.public void set(int year, int month, int day);
// 设置具体的年月日
c2.set(2020, 9, 10);// 设置成2020年的10月10日
Date date2 = c2.getTime();
System.out.println(date2);// Sat Oct 10 10:10:59 CST 2020

//7. public void add(int field, int amout);
// 将某个字段对应的日期移动(增加或者减少)
c2.add(Calendar.DAY_OF_MONTH, 10);
System.out.println(c2.getTime());//Tue Oct 20 10:14:04 CST 2020

}
}

  


如:
* 从键盘中录入一个年份,判断是平年还是闰年?
* 方式一: 判断这个年份能不能被4整除,并且不能被100整除, 或者是能被400整除. 特别麻烦
* 方式二: 只需要判断这个月的2月份有多少天, 如果是29天闰年, 如果是28天平年.

public class Demo05CalendarPractice {

public static void main(String[] args) {
// * 1. 创建Scanner对象,键盘中录入一个年份
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个年份");
int year = sc.nextInt();

// * 2. 创建Calendar对象, 使用getInstance方法
Calendar c = Calendar.getInstance();

// * 3. 设置输入年3月1日, set(int year, int month, int day);
c.set(year, 2, 1);// 设置成3月1日

// * 4. 将这个日历对象的中的天数,向前偏移一天,add(int field, int amount);
c.add(Calendar.DAY_OF_MONTH, -1);

// * 5. 获取这个月的天数.get(int Field);
int day = c.get(Calendar.DAY_OF_MONTH);

// * 6. 判断是29天,还是28天;
if(day == 29){
System.out.println(year + "年是闰年");
}else{
System.out.println(year + "年是平年");
}
}
}

  




* System: 表示和系统相关的属性类,比如: 获取JDK的路径, 获取系统用户名,获取JDK的供应商等等...;
*
* 使用步骤:
* 1.由于System在java.lang包下面所以使用不需要导入包
* 2.创建对象,由于System的构造方法都被私有化了,所以不能创建对象
* 3.使用成员变量(字段),或者成员方法都是静态的内容;
*
* 常用的静态字段:
* System.in 标准的输入(标注的字节输入流);
* System.out 标准的输出
* System.err 用来输出错误或者异常信息,以红色字体展示, 快捷键: syse alt + / 回车
*
* 静态成员方法:
* public static void exit(int status);// 退出JVM虚拟机,0表示正常退出,非0异常退出
* public static long currentTimeMillis();// 获取当前运行在这一行的毫秒值
* public static void gc();// 建议JVM去做垃圾回收,不一定会回收.
* public static String getProperty(String key);// 获取指定的相关系统属性.
* key: 查API中System,先找到getProperties,通过这个方法可以找到所有的key


* Math: 可以用来表示复杂的数学运算相关的类,在java.lang包下面
*
* Math的使用步骤:
* 1. 导入包, 因为在lang包下所以不需要导入包
* 2. 创建对象, Math的构造方法都是私有的,所以不能创建对象
* 3. 使用静态成员变量,静态成员方法
*
* 静态的成员变量:
* Math.PI 表示一个π
*
* 静态的成员方法:

1. public static double abs(double a);// 返回double类型的绝对值
2. public static double ceil(double a);// 向上取整,以double类型返回
3. public static double floor(double a);// 向下取整,以double类型返回
4. public static double min(double a, double b);// 获取两个数的较小值
5. public static double max(double a, double b);// 获取两个数的较大值
6. public static double pow(double a, double b);// 返回a的b次方
7. public static double random();// 返回带正好的double值,该值大于等于0.0且小于1.0
8. public static long round(double a);// 返回a的四舍五入的值

 

框选快捷键:
alt + shit + a, 操作完成之后再按一次回到正常状态.

 

包装类:
* 如果直接操作基本数据类型,方式有限,只能进行基本的数学运算, 如果变成包装类之后,可以使用类中的方法,进行更加复杂的操作
* 比如: 可以将对应的数据存储到集合, 比如可以进行进制的转换;
* 如何将一个基本数据类型变成包装类,对应的类型有哪些?
* 基本数据类型 包装类类型(都在java.lang包下,全部都能直接使用)
* byte Byte
* short Short
* int Integer(特殊)
* long Long
* float Float
* double Double
* char Character(特殊)
* boolean Boolean


* 一个数字字符串如何和一个基本数据类型之间进行相互转换?
* 字符串转成基本数据类型:
* 方式:
* int num = Integer.parseInt(String str);
* 基本类型 变量名 = 包装类型.parseXxx(String str);// 和上面同理
*
*
* 基本数据类型转成字符串:
* 方式一: 基本数据类型 + "" ;// 推荐使用
* 扩展方式:
* 方式二: Integer的方法, Integer.toString(int num);
* 方式三(补充): String的方法, String.valueOf(int num);
*
* 注意:
* 只有数字类型对应的字符串,才能够转成对应基本数据类型

package cn.itcast.demo02;

public class Demo09StringPackAssign {

public static void main(String[] args) {

//字符串转成基本数据类型:
String str = "10";
int num = Integer.parseInt(str);
System.out.println(num + 10);

System.out.println(Double.parseDouble("60.66"));// 60.66
System.out.println("===========");

// 基本数据类型转成字符串的方式(三种)
// * 方式一: 基本数据类型 + "" ;// 推荐使用
System.out.println(10 + "" + 20);// 1020

// * 方式二: Integer的方法, Integer.toString(int num);
System.out.println(Integer.toString(100) + 200);// 100200

// * 方式三(补充): String的方法, String.valueOf(int num);
System.out.println(String.valueOf(50) + 50);// 5050
}
}

  

 

* 自动装箱: 将基本数据类型自动封装引用数据类型
* 自动拆箱: 将引用数据类型拆箱成基本数据类型

package cn.itcast.demo02;

public class Demo10AutoPack {

public static void main(String[] args) {

//自动装箱: 将基本数据类型自动封装引用数据类型
Integer a = 10;
System.out.println(a);

Integer b = new Integer(20);
System.out.println(b.toString());
System.out.println("=========");

//自动拆箱: 将引用数据类型拆箱成基本数据类型
int c = new Integer(30);
System.out.println(c);

Integer d = 10;
d++;// 自动拆成 d = d + 1
System.out.println(d + 10);// 11+10 = 21
}
}

  

正则表达式:
* 什么是正则表达式呢? 就是一个特殊的字符串, 用来匹配给定的字符串是否满足这个特殊的规则;
* 和正则表达式相关的方法(String类的方法):
* 1. public String[] split(String regex);
* 2. public boolean matches(String regex);
*
* 在正则表达式中英文句点(.), 有特殊含义,如果匹配需要使用 \\.
* 杠(\)在正则表达式中也有特殊含义表示,转移字符,用需要打印出 \, 需要写上: \\
* 加号(+), 字符+, 表示这个字符出现了一次或者多次

public class Demo11RegexExpresion {

public static void main(String[] args) {

//0.定义需要处理的字符串
//String content = "10086-10010-10000";
//String content = "10086.10010.10000";
String content = "10086,,,,,,10010,,,10000,,99999";

//1. public String[] split(String regex);
// 定义规则
//String regex = "-";
//String regex = "\\.";
String regex = ",+";

//2. 匹配
String[] array = content.split(regex);
System.out.println(Arrays.toString(array));

System.out.println("\\");// \
System.out.println("\\.");// \.
}
}

  


例子:

package cn.itcast.demo02;
/*
* String的方法;
* public boolean matches(String regex);// 使用regex规则来检查调用的字符串是否满足这个规则.
* 
*/
public class Demo12MathesRegexExpresion {

public static void main(String[] args) {
//checkQQ();
//checkPhone();
checkEmail();
}

/*
* 匹配邮箱:
* 特点:
* xxx@xx.xx.xxx
* hello@qq.com.cn
* 1. @符号前面必须要有内容
* 2. @后面也有内容
* 3. 必须要有一个点. 可以有两个点
*/
public static void checkEmail(){

//1.定义邮箱
String email = "1111hahah@qq.com";

//2.定义规则
String regex = "\\w+@\\w+\\.\\w+(\\.\\w+)?";

//3.匹配邮箱
boolean isEmail = email.matches(regex);

if(isEmail){
System.out.println("是一个邮箱");
}else{
System.out.println("不是一个邮箱");
}

}

/*
* 匹配手机号:
* 特点:
* 1. 纯数字
* 2. 第一位必须是1
* 3. 第二位可以是: 3, 5, 7, 8
* 4. 共有11位
*/
public static void checkPhone(){
//1.定义手机号
String phone = "15838389438";

//2.定义规则
String regex = "[1][3578][0-9]{9}";

//3.匹配, 使用matches方法
boolean isPhone = phone.matches(regex);

//4.输出
if(isPhone){
System.out.println(phone + " 是一个手机号");
}else{
System.out.println(phone + " 不是一个手机号");
}
}

/*
* 匹配一个qq号:
* 特点:
* 1. 是一个纯数字
* 2. 开头不能是0
* 3. qq号的位数是 5到12位
*/
public static void checkQQ(){
//1. 定义一个qq号
String qq = "123456789";

//2.定义规则
String regex = "[1-9][0-9]{4,11}";

//3.匹配
boolean isQQ = qq.matches(regex);

if(isQQ){
System.out.println(qq + " 是一个qq号");
}else{
System.out.prin

  

 

posted @ 2017-12-28 22:51  Zennon  阅读(185)  评论(0编辑  收藏  举报