大家好,我是被白菜拱的猪。
一、Date
1.
计算机中规定了一个系统的时间,依次作为时间计算的原点,1970年1月1日0时0分0秒000毫秒,格林威治时间。
Date d = new Date(24*60*60*1000);
System.out.println(d);
Date d2 = new Date();
System.out.println(d2);
//任意一个日期使用 getTime 方法都会得到当前日期时间到 时间原点的毫秒数
System.out.println(d2.getTime());
long 目标时间毫秒数 = d2.getTime() + 45L * 24 * 60 * 60 * 1000;
Date d3 = new Date(目标时间毫秒数);
System.out.println(d3);
Date的构造函数,参数是毫秒数,原点时间加上这个毫秒数然后计算加上过后的日期。
.getTime()方法时获取当前时间到时间原点的毫秒数。
2. SimpleDateFormat
SimpleDateFormat是简单日期格式化工具,format可以把 Date ----> String
SimpleDateFormat sdf = new SimpleDateFormat("y-MM-dd HH:mm:ss");
String str = sdf.format(d);
System.out.println(str);
String str2 = "2019-01-31 23:59:59";
try {
//parse方法 把String ---- Date
Date d2 = sdf.parse(str2);
System.out.println(d2);
} catch (Exception e) {
e.printStackTrace();
}
SimpleDateFormat()里面的参数是格式化的格式
format()方法与parse()方法功能相反
前者是将Date转换为String
后者是将String转换为Date(会有异常产生)
3.
我们通过一道题更加深刻的了解Date与SimpleDateFormat
已知时间:20060521090430,编程输出该时间的后30天零5小时的时间是多少?
(1)首先“20060521090430”是一个字符串,第一步我们想肯定是将字符串转化为Date类型,那什么方法能帮助我们解决这个问题呢?对没错,SimpleDateFormat中的parse方法。
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
//我们有一个 String 类型的日期和时间
String str = "20060521090430";
System.out.println(str);
//通过parse方法,将 String 转为 Date
Date d = sdf.parse(str);
(2)将字符串转化为时间之后,我们就要算30天零5小时,在Date中算多少时间之前我们是通过毫秒来计算,因此我们用getTime()获取毫秒数
(3)然后计算目标毫秒数,也就是加上((30L*24) + 5) * 60 * 60 * 1000
(4)在将毫秒数转化为Date
(5)最后format方法得到我们想要的时间格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
//我们有一个 String 类型的日期和时间
String str = "20060521090430";
System.out.println(str);
//通过parse方法,将 String 转为 Date
Date d = sdf.parse(str);
//将 Date 转为毫秒(long)
long l = d.getTime();
//计算得到目标毫秒数
long l2 = l + ((30L*24) + 5) * 60 * 60 * 1000;
//讲目标时间从 long 转为 Date
Date d2 = new Date(l2);
//再将 Date 转为 String
String str2 = sdf.format(d2);
System.out.println(str2);