记录工作中常用的日期、时间API
获取当前时间戳---------------返回当前时间与从【1970年1月1日0时0分0秒】之间以毫秒为单位的时间差
long currentTimeMillis = System.currentTimeMillis();
Date类的使用
-
java.util.Date
两个构造器:
(1)一个无参构造器 Date date = new Date(); 创建一个基于当前系统时间的Date的实例
(2)一个有参构造器 Date date = new Date(9999999999L); 创建一个基于指定时间戳的Date的实例 -
java.sql.Date (是java.util.Date子类) 对应着数据库中的date类型
-
SimpleDateFormat类:用于日期时间的格式化和解析(只适用于Date,Calendar不能用)
格式化:日期—>字符串
SimpleDateFormat sf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
Date date = new Date();
String strDate = sf.format(date);
解析:字符串—>日期
Date parse = sf.parse(strDate); -
Calendar类(日历类):抽象类
(1)实例化,由于Calendar是一个抽象类,所以我们需要创建其子类的实例。这里我们通过Calendar的静态方法getInstance()即可获取
Calendar instance = Calendar.getInstance();
(2)常用的方法:get(int field) / set(int field, xx) / add(int field, xx) / getTime() 获取date / setTime(Date) 重置当前时间
int field 可以为: Calendar.HOUR… 好多好多,根据业务需求可以自行去翻阅API -
Date和Calendar都有缺点,会面临的问题
1.可变性:像日期和时间这样的类应该是不可变
2.偏移性:Date中的年份是从1900开始的,而月份都是从0开始的
3.格式化:格式化只对Date有用,Calendar则不行,此外,他们也不是线程安全的,不能处理闰秒等。 -
所以JDK1.8引入了新的日期API,如下:
一、 LocalDate 本地日期 年月日 LocalTime 本地时间 时分秒 LocalDateTime 本地日期时间 年月日T时分秒 of():获取指定的日期、时间对应的实例 LocalDate date = LocalDate.of(2022, 8, 3); 二、 Instant: 瞬时 ----- 类似于Date 实例化:now() / ofEpochMilli() 方法: toEpochMilli() 获取时间戳 三、DateTimeFormatter 类似于 SimpleDateFormat DateTimeFormatter sf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); //格式化:日期、时间-----> 字符串 LocalDateTime dateTime = LocalDateTime.now(); String strDate = sf.format(dateTime); //解析:字符串---->日期、时间 LocalDateTime time = LocalDateTime.from(sf.parse("2023-03-15 16:23:15"));