第2节 Date类
06_毫秒值的概念和作用
(一)介绍
java.util.Date:表示日期和时间的类
类Date表示特定的瞬间,精确到毫秒
毫秒:千分之一秒,1000毫秒=1秒
特定的瞬间:一个时间点、一刹那时间
2088-08-08 09:55:33:333 瞬间
2088-08-08 09:55:33:333 瞬间
…
毫秒值的作用:可以对日期和时间进行计算
2099-01-03到2088-01-01中间一共有多少天
可以日期转换为毫秒进行计算,计算完毕,把毫秒转换为日期
把日期转换为毫秒
当前日期:2088-01-01
时间原点(0)毫秒:1970年1月1日 00:00:00(英国格林威治时间)
就是计算当前日期到时间原点之间一共经历了多少毫秒
注意:
中国属于东八区,会把时间增加八个小时 1970年1月1日 08:00:00
把毫秒转换为日期
1天=24
×
\times
× 60
×
\times
× 60 = 86400
×
\times
× 1000 =86400000毫秒
例如:获取当前系统时间到1970年1月1日 00:00:00经历了多少毫秒
System.out.println(System.currentTimeMillis());
(二)练习
令系统打印输出当前时间,具体年月日,直到毫秒
因为学习到这一节,就自己想着尝试打印出现在的系统时间。其实本质上就是毫秒转换为日期,其中需要涉及到一些数学计算。下面是我自己写的,可能会有些冗余,例如判断是几月,可能还会有更好的更简便的方法,我只是用了最能想到的一种,许多if的嵌套。如果学到后面,有简便方法,再更新。
public class Demo01Date {
public static void main(String[] args) {
long n = System.currentTimeMillis();
// System.out.println(n);//获取当前系统时间到1970年1月1日 00:00:00经历了多少毫秒
long totaldate = n/86400000;
// System.out.println(totaldate);//输出一共有多少天
long date = totaldate;
int year = 1970;
while (date > 365){
if(year % 4 != 0){
date = date - 365;
year++;
}else if ((year % 4 == 0 && year % 400 !=0)|| year % 400 == 0){
date = date -366;
year++;
}
}
int month = 0;
int feb = 28;
long nowdate = 0;//当前月的第几天
if((year % 4 == 0 && year % 400 !=0)|| year % 400 == 0){
feb = 29;
}
if(date < 31){
month = 1;
nowdate = date;
}else if (31 <= date && date < 31+feb){//这里的date要取到31,意思是,当date=31时,显示已经过了31天了,现在肯定是2月份了
month = 2;
nowdate = date - 31 + 1;
}else if (31+feb <= date && date < 62+feb){
month = 3;
nowdate = date - 31-feb + 1;
}else if (62+feb <= date && date < 92+feb){
month = 4;
nowdate = date - 62-feb + 1;
}else if (92+feb <= date && date < 123+feb){
month = 5;
nowdate = date - 92-feb + 1;
}else if (123+feb <= date && date < 153+feb){
month = 6;
nowdate = date - 123-feb + 1;
}else if (153+feb <= date && date < 184+feb){
month = 7;
nowdate = date - 153-feb + 1;
}else if (184+feb <= date && date < 215+feb){
month = 8;
nowdate = date - 184-feb + 1;
}else if (215+feb <= date && date < 245+feb){
month = 9;
nowdate = date - 215 -feb + 1;
}else if (245+feb <= date && date < 276+feb){
month = 10;
nowdate = date - 245 -feb + 1;
}else if (276+feb <= date && date < 306+feb){
month = 11;
nowdate = date - 276 -feb + 1;
}else if (306+feb <= date && date < 337+feb){
month = 12;
nowdate = date - 306-feb + 1;
}
// System.out.println(month);
// System.out.println(nowdate);
long mod = (n % 86400000);
long hour = mod/1000/60/60 + 8;
// System.out.println(mod);
// System.out.println(hour);
long min = (mod/1000/60) % 60;
// System.out.println(min);
long sec = mod/1000 - (hour-8)*60*60- min * 60;
// System.out.println(sec);
long milsec = mod %1000;//输出到毫秒
// System.out.println(milsec);
System.out.println("从1970年00:00:00(英国格林威治)到现在系统时间经过了"+n+"毫秒。");
System.out.println("一共是"+totaldate+"天。");
if (sec < 10 && min <10){ //如果分钟不到两位的话,例如9分钟,令其显示09
System.out.println("现在是"+year+"年"+month+"月"+nowdate+"日"+" "+ hour + ":"+ "0"+ min + ":"+"0" + sec + ":" + milsec);
}
if(sec < 10&& min >= 10 ){
System.out.println("现在是"+year+"年"+month+"月"+nowdate+"日"+" "+ hour + ":"+ min + ":"+"0" + sec + ":" + milsec);
}
if(sec >= 10&& min < 10 ){
System.out.println("现在是"+year+"年"+month+"月"+nowdate+"日"+" "+ hour + ":"+"0"+ min + ":" + sec + ":" + milsec);
}
if(sec >= 10&& min >= 10 ){
System.out.println("现在是"+year+"年"+month+"月"+nowdate+"日"+" "+ hour + ":"+ min + ":" + sec + ":" + milsec);
}
}
}
输出结果为:
从1970年00:00:00(英国格林威治)到现在系统时间经过了1567331402856毫秒。
一共是18140天。
现在是2019年9月1日 17:50:02:856
07_Date类的构造方法和成员方法
(1)Date类的空参数构造方法:
Date()获取当前系统的日期和时间
private static void demo01(){
Date date = new Date();
System.out.println(date);//Sun Sep 01 19:58:55 CST 2019
}
(2)Date类的带参数的构造方法:
Date(long date):传递毫秒值,把毫秒值转换为Date日期
private static void demo02(){
Date date = new Date(1567338870549L);
System.out.println(date);//Sun Sep 01 19:54:30 CST 2019
}
(3)Date类的long getTime()把日期转换为毫秒值
返回自1970年1月1日 00:00:00GMT以来Date对象表示的毫秒值,相当于System.currentTimeMillis()
private static void demo03(){
Date date = new Date();
long time = date.getTime();
System.out.println(time);//1567339135742
}