java.util.Date:表示日期和时间的类,类Date表示特定的瞬间,精确到毫秒。
DateFormat:日期格式化
java.text.DateFormat:日期/时间格式化子类的抽象类
DateFormat是抽象类,所以不方便创建对象,所以我们利用他的子类 SimpleDateFormat 创建对象。
使用DateFormat类中的 format 方法,把日期解析为文本:
其实,我们是希望调用 format 方法达到格式化和解析的作用
SimpleDateFormat 构造方法里面是模式,你要以怎样的模式去显示 text ,sout(text)
模式有很多种:
把日期格式化成文本,按照 构造方法中给定的模式进行显示,
使用DateFormat类中的 parse 方法,把文本解析为日期:
public static void main(String[] args) throws ParseException {
System.out.println("请输入出生日期 格式YYYY-MM-dd");
String birthdayString = new Scanner(System.in).next(); //获取出生日期,键盘输入
//将字符串日期,转成Date对象
//创建SimpleDateFormat 对象,写日期模式(这一步主要是建立起模式)
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//模式
//调用方法parse,字符串转成日期对象//也能说将文本转换成日期对象
Date birthdayDate = sdf.parse(birthdayString); //Sat Jul 07 00:00:00 CST 2018 ==>> 2018-7-7
Date todayDate = new Date();//获取当前日期对象
//将两个日期转成毫秒值,Date类的方法getTime
long birthdaySecond = birthdayDate.getTime();//结果是毫秒
long todaySecond = todayDate.getTime();//
long secone = todaySecond - birthdaySecond;
if(secone<0){
System.out.println("还没出生呢");
}else {
System.out.println(secone/1000/60/60/24+"天");
}
}
通过如上代码,我们进行分析:
我们通过模式来键入日期,这个时候,先要把这个键入的文本日期转换成日期对象 Date
转换成日期对象后,通过日期对象调用getTime()方法,这个时候就变成了毫秒,也就是那个日期离现在的毫秒。
练习:
请使用日期时间相关的API,计算出一个人已经出生了多少天。
分析:
1.使用Scanner类中的方法next,获取出生日期
2.使用DateFormat类中的方法parse,把字符串的出生日期,解析为Date格式的出生日期
3.把Date格式的出生日期转换为毫秒值
4.获取当前的日期,转换为毫秒值
5.使用当前日期的毫秒值-出生日期的毫秒值
6.把毫秒差值转换为天(s/1000/60/60/24)
Date d = new Date(3000L);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String format = sdf.format(d);
System.out.println(format);
相当于 sdf 模式 用format方法格式化为时间对象,也就是时间字符串。
String str = "2088年08月08日 08:08:08";
Date parse = sdf.parse(str);
System.out.println(parse);
想想,为什么格式化的时候用的是 String 而,解析的时候用的是Date ,前者是调用方法直接返回字符串,而后者返回的是时间对象。那是因为,在String format = sdf.format(d); 的时候,d 是作为对象传进来的。
String format(Date d); 根据指定格式格式化日期对象
Date parse(String s); 根据指定格式解析字符串