前言
在之前版本的时间处理上,存在各式各样的缺陷或不易于使用1。
但是在实际的开发中,Date类、SimpleDateFormat类仍然在使用,既然官方都给出了新的替代品,为什么不学习使用呢?
LocalDateTime
等位于java.time
包下,专门用于处理时间2:
挑一些常用的来学习一下:
获取当前时间:
public static LocalDateTime now()
从默认时区的系统时钟获取当前的日期时间。
返回值:
当前日期时间使用系统时钟和默认时区,不为空
使用:
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println("获取当前时间:"+localDateTime);
//output
//获取当前时间:2021-01-12T17:30:24.181
时间格式化 DateTimeFormatter
主要的日期时间类提供两种方法 - 一种用于格式化, format(DateTimeFormatter formatter) ,
format(DateTimeFormatter formatter)一种用于解析, parse(CharSequence text, DateTimeFormatter formatter) 。
使用:
LocalDateTime localDateTime = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
System.out.println("格式化日期:"+localDateTime.format(formatter));
//或
System.out.println("格式化日期:"+formatter.format(localDateTime));
//格式化日期:2021-01-12 17:42:13
//格式化日期:2021-01-12 17:42:13
获取当前时间戳(毫秒)
这里使用Instant
类,可以用他获取某一时间点的时间戳。
使用:
LocalDateTime localDateTime = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
System.out.println("时间戳:"+localDateTime.toInstant(ZoneOffset.of("+0")).toEpochMilli());//1
//时间戳:1610475251753
System.out.println("时间戳:"+localDateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli());//2
//时间戳:1610446451753
System.out.println("时间戳:"+localDateTime.toInstant(ZoneOffset.ofHours(8)).toEpochMilli());//3
//时间戳:1610446451753
System.out.println("时间戳:"+Instant.now().toEpochMilli());//4
//时间戳:1610446451761
System.out.println("时间戳:"+System.currentTimeMillis());
//时间戳:1610446451761
使用LocalDateTime
转换时需要设置时区,可以看到,第一种设的0,而我所在的是东八区,所以第二第三两种形势加了八小时,也可以直接使用Instant.now()
直接转化(四),最后是系统时间戳。
时间戳转时间
同样需要使用Instant
类进行处理。
使用:
LocalDateTime localDateTime = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
System.out.println("时间戳转时间:"+Instant.ofEpochMilli(System.currentTimeMillis()).
atZone(ZoneOffset.ofHours(8)).format(formatter));
//时间戳转时间:2021-01-12 18:43:36
时间操作
对时间进行加减操作,对于特殊的时间,比如03-01
可以自动处理为02-28
。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime localDateTime = LocalDateTime.parse("2021-03-01 18:56:48",formatter);
System.out.println("格式化日期:"+formatter.format(localDateTime));
//格式化日期:2021-03-01 18:56:48
System.out.println("格式化日期 减一天:"+formatter.format(localDateTime.minusDays(1)));
//格式化日期 减一天:2021-02-28 18:56:48
System.out.println("格式化日期 减一月:"+formatter.format(localDateTime.minusMonths(1)));
//格式化日期 减一月:2021-02-01 18:56:48
此外还有with相关的调整,对时间天数、月份、年等进行调整,如果调整的数值不在自然区间内,如二月调整到30号,会抛出DateTimeException异常。
暂时就这么多吧。