技术干货程序猿阵线联盟-汇总各类技术干货java进阶干货

Java8新特性系列(时间/日期)

2017-12-30  本文已影响0人  史培培
题图:by pixel2013 From pixabay

上期我们介绍了Java8中的Optional,本期我们介绍Java8中新的时间日期API。

JSR

在讲之前,首先讲一下JSR,什么是JSR呢?Java Specification Requests,是Java规范提案。
常见的JSR有:

JSR-310即时间规范标准:

在Java8之前,操作时间日期的类为:DateCalendar,第三方包如Joda-time
在Java8中,新增了许多时间日期API

Joda-time

引入Maven依赖

<dependency>
    <groupId>joda-time</groupId>
    <artifactId>joda-time</artifactId>
    <version>2.9.2</version>
</dependency>

核心类

用法举例

public static void main(String[] args) {
    DateTime today = DateTime.now();
    DateTime tomorrow = today.plusDays(1);
    DateTime oneHourAfter = today.plusHours(1);
    System.out.println(today.toString());
    System.out.println(tomorrow.toString());
    System.out.println(oneHourAfter.toString());

    DateTime day = new DateTime(2017,12,30,17,47,30);
    System.out.println(day.dayOfYear().getAsString());
    System.out.println(day.dayOfMonth().getAsString());
    System.out.println(day.dayOfWeek().getAsString());
}

结果:

2017-12-30T17:49:24.065+08:00
2017-12-31T17:49:24.065+08:00
2017-12-30T18:49:24.065+08:00
364
30
6

如果用过Joda-time的,那么Java8中新的时间日期API就很容易上手了。

Java8中新的时间日期API

LocalDate/LocalTime/LocalDateTime

Instant 时间戳

用于“时间戳”的运算。它是以Unix元年(传统 的设定为UTC时区1970年1月1日午夜时分)开始 所经历的描述进行运算。

Duration 和 Period

Clock 时钟

Clock类提供了访问当前日期和时间的方法,Clock是时区敏感的,可以用来取代System.currentTimeMillis() 来获取当前的微秒数。某一个特定的时间点也可以使用Instant类来表示,Instant类也可以用来创建老的java.util.Date对象。

Clock clock = Clock.systemDefaultZone();  
long millis = clock.millis();  
Instant instant = clock.instant();  
Date date = Date.from(instant);

日期的操作

解析与格式化

java.time.format.DateTimeFormatter类:该类提供了三种格式化方法:

DateTimeFormatter isoDateTime = DateTimeFormatter.ISO_DATE_TIME;
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss E");

时区的处理

Java8中加入了对时区的支持,带时区的时间为分别为:

其中每个时区都对应着ID,地区ID都为 “{区域}/{城市}”的格式 例如 :Asia/Shanghai等,ZoneId:该类中包含了所有的时区信息

上一篇下一篇

猜你喜欢

热点阅读