Java 8 新特性之新的日期时间库

​ 介绍Java8新的日期时间库用法。由于Java之前旧的日期时间类太难用,所以Java8重新开发了新的日历时间库java.time。主要包含LocalDate本地日期类、LocalTime本地时间类、LocalDateTime日期时间类、ZonedDateTime带时区的日期时间类、Clock系统闹钟类、Instant类等。

常见用法

​ 由于用法非常简单,直接上代码了,就只添加简单的注释,不作过多说明了(能用代码说明的就尽量不用注释)。

获取本地日期

LocalDate today = LocalDate.now();
System.out.println(today);//输出当前日期,比如2018-03-13

vs旧版本

String today = new SimpleDateFormat("yyyy-MM-dd").format(new Date());

显然新的库使用更加简洁。

转换日期格式

有时候我们并不想要输出yyyy-MM-dd的格式,而是想要输出其他格式,比如yyyy/MM/dd格式
这个时候可以使用DateTimeFormatter类来转换格式。

LocalDate today = LocalDate.now();
System.out.println("LocalDate now is:" + today.format(DateTimeFormatter.ofPattern("yyyy/MM/dd")));//输出2018/03/13

分别获取年、月、日

int year = today.getYear();
int month = today.getMonthValue();
int day = today.getDayOfMonth();
System.out.printf("Year: %d Month: %d Day: %d\n",year,month,day);
//输出Year: 2018 Month: 03 Day: 13

而以前还需要使用Calendar类来帮忙,繁琐且可读性差。

返回指定的某个日期

LocalDate specifiedDate = LocalDate.of(2018,3,13);
System.out.println("指定日期:" + specifiedDate);//输出2018-03-13

返回当前月份共有几天

int lengthOfMonth = today.lengthOfMonth();
System.out.printf("该月有%d天\n",lengthOfMonth);//根据月份输出,比如31

获取星期几

DayOfWeek dayOfWeek = today.getDayOfWeek();
System.out.println(dayOfWeek);//输出MONDAY、TUESDAY、WEDNESDAY...

比较两个日期

LocalDate today2 = LocalDate.of(2018,3,12);
if(today.equals(today2)){
    System.out.println("today equals today2");
}
if(today.isBefore(today2)){
    System.out.println(today + "早于" + today2);
}
if(today2.isAfter(today)){
    System.out.println(today + "晚于" + today2);
}

日期计算

LocalDate tomorrow = today.plusDays(1);
LocalDate preWeekDate = today.minusWeeks(1);
LocalDate nextMonthDate = today.plusMonths(1);
System.out.println("明天日期:" + tomorrow);
System.out.println("上一周日期:" + preWeekDate);
System.out.println("下个月日期:" + nextMonthDate);

日期、时间计算:往前就minusXXX、往后就plusXXX

获取当前时间

//默认格式HH:mm:ss.nnn 带毫秒
LocalTime time = LocalTime.now().withNano(0); //将毫秒取值0
System.out.println("LocalTime now is:" + time);

我们一般使用只需要到秒的话,就使用withNano(0)方法将毫秒取值0,即可输出HH:mm:ss格式。同理,其他还有withHour()、withMinute()、withSecond()方法用来直接修改时、分、秒。

获取当前日期时间

//默认格式yyyy-MM-dd HH:mm:SS.nnn 可使用DateTimeFormatter转换格式
LocalDateTime dateTime = LocalDateTime.now();
System.out.println("转换后的日期时间格式:" + dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:SS")));

返回指定的某个时间

LocalTime specifiedTime = LocalTime.of(15,40,30);
System.out.println("指定时间:" + specifiedTime);//输出15:40:30

带时区的完整时间

ZonedDateTime zdt = ZonedDateTime.now();
System.out.println(zdt);//输出2018-03-13T14:36:11.425+08:00[Asia/Shanghai]

获取时间戳

Instant timestamp = Instant.now();
System.out.println(timestamp);//输出2018-03-13T06:36:11.425Z
long currentTimeMillis = Clock.systemUTC().millis();
System.out.println(currentTimeMillis);//输出1520922971426,相当于System.currentTimeMillis()方法

总结

比较常用的方法就这些了,后续有遇到新的问题再补充。建议大家在新的项目中最好就用新的日期时间库中的类,会方便很多。而对于那些历史遗留项目,就只能继续入坑了,除非你改用JDK 1.8的。

posted @ 2019-02-21 21:36  universal  阅读(411)  评论(0编辑  收藏  举报