目录
一、时间戳的概念
时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起 至现在的总秒数,本质是一个long类型的整数,表示日期对象。
java 体系的时间戳是毫秒
package com.by.date;
public class Riqi {
public static void main(String[] args) {
System.out.printf("%tF %<tT%n", 0L);//1970-01-01 08:00:00
System.out.printf("%tF %<tT%n", 1675848496621L);//2023-02-08 17:28:16
}
}
二、java.util.Date
Date 类表示系统特定的时间戳,可以精确到毫秒。Date 对象表示时间的默认顺序是星期、月、日、小 时、分、秒、年。
Date 类有如下两个构造方法。
- Date():此种形式表示分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒),使 用该构造方法创建的对象可以获取本地的当前时间。
- Date(long date):此种形式表示从 GMT 时间(格林尼治时间)1970 年 1 月 1 日 0 时 0 分 0 秒开 始经过参数 date 指定的毫秒数。
eg;
package com.by.date;
import java.util.Date;
public class Riqi {
public static void main(String[] args) {
Date date1 = new Date();// 调用无参构造
System.out.println(date1);//Tue Jan 02 09:59:04 CST 2024
Date date2 = new Date(60000);
System.out.println(date2);//Thu Jan 01 08:01:00 CST 1970
}
}
Date 类的无参数构造方法获取的是系统当前的时间,显示的顺序为星期、月、日、小时、分、秒、年。
Date 类带 long 类型参数的构造方法获取的是距离 GMT 指定毫秒数的时间,60000 毫秒是一分钟,而 GMT(格林尼治标准时间)与 CST(中央标准时间)相差 8 小时,也就是说 1970 年 1 月 1 日 00:00:00 GMT 与 1970 年 1 月 1 日 08:00:00 CST 表示的是同一时间。 因此距离 1970 年 1 月 1 日 00:00:00 CST 一 分钟的时间为 1970 年 1 月 1 日 00:01:00 CST,即使用 Date 对象表示为 Thu Jan 01 08:01:00 CST 1970。
三、日期操作
(1)字符串和日期的转化
package com.by.date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Riqi {
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//1. 将字符串转化为日期
Date date1 = sdf1.parse("2000-11-11 11:11:11");
System.out.println(date1);//Sat Nov 11 11:11:11 CST 2000
//2. 将日期转化为字符串
Date date2=new Date();
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
String str = sdf2.format(date2);
System.out.println(str);//2024/01/02 10:49:32
}
}
(2)指定日期格式化
package com.by.date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Riqi {
public static void main(String[] args) throws ParseException {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("今天是" + "yyyy年MM月dd日 HH点 mm分 ss秒");
String str = sdf.format(date);
System.out.println(str);//今天是2024年01月02日 10点 53分 32秒
}
}
四、创建Date对象的三种方法
package com.by.date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Riqi {
public static void main(String[] args) throws ParseException {
// 构造方法 实例化对象
Date date1 = new Date();//无参
Date date2 = new Date(System.currentTimeMillis());//带参
Date date3 = new Date(1675848496621L);
System.out.printf("%tF %<tT%n",date1);//2024-01-02 10:58:49
System.out.printf("%tF %<tT%n",date2);//2024-01-02 10:58:49
System.out.printf("%tF %<tT%n",date3);//2023-02-08 17:28:16
}
}
五、java.utio.Date的常用方法
package com.by.date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Riqi {
public static void main(String[] args) throws ParseException {
// 常用方法
Date date=new Date();
long l1 = date.getTime();//获取当前时间 毫秒
date.setTime(l1+(1000*60*60*24*10));// 设置当前时间
System.out.printf("%tF %<tT",date);//2024-01-12 11:03:28
//计算两个日期之间的天数 1989-10-15 出生 到目前活了多少天?
//1. 先将字符串转换为日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = sdf.parse("2024-1-1");
Date date2 = sdf.parse("1989-10-15");
long d1 = date1.getTime();
long d2 = date2.getTime();
long d3=d1-d2;
System.out.println(d3/(1000*60*60*24));//12496
}
}