java.time.Instant
java.time.Instant类对应的是时间线上的一个时间点。该类通过保存着从格林威治的起始时间(1970年一月一日零点零分)开始计算所经过的纳妙数来表示时间点。注意:该类是JDK8中新引入的一系列日期时间相关API中的最基础类。如果需要创建该类的一个实例,需要使用该类的工厂方法,示例如下:
Instant now = Instant.now();
一个Instant实例中包含有两个域,分别代表着秒数和纳秒数。
+ EpochSecond 可正可负,相对于格林威治的起始时间 + Nano 只能为正,少于1秒的纳秒值。Instant类本身提供了很多方法用于算法计算,其中的一些如下:
+ plusSeconds()
+ plusMillis()
+ plusNanos()
+ minusSeconds()
+ minusMillis()
+ minusNanos()
java.time.Duration
java.time.Duration类用于代表两个Instant对象之间的一段时间。该类同样是JDK8中新引入的。Duration类是不可变类,意味着一个该类的对象一旦生成,该对象就是不可变的。如果需要创建Duration类的对象,直接使用该类的工厂方法就可以了,示例代码如下:
Instant first = Instant.now();
Instant second = Instant.now();
Duration d = Duration.between(first, second);
类似地,一个Duration对象中同样是含有两个域,用来表示一段时间。如果需要访问这两个域变量,可以使用如下的方法:
getNano();
getSecond();
同时,该类中还提供了方法用于把该对象所代表的一段时间转化成其他单位表示形式。简单举例如下:
toNanos();
toMillis();
toMinutes();
toHours();
toDays();
此处注意一下get方法与to方法的区别:比如,getNano方法返回的是Duration对象中纳秒部分的值,而toNano方法是把Duration对象整个时间值转换成纳秒值。 正如你所期待的那样,Duration类中含有大量的算术操作方法,可以用来生成新的Duration对象。简单举例如下:
plusNanos();
plusMillis();
minusSeconds();
minusDays();
所有的这些算术操作方法都会返回一个新的Duration对象,这样才保证了Duration类是一个不可变类。
java.time.LocalDate
java.time.LocalDate类同样是在JDK8中新引入的日期时间类。该类用来表示不含时区信息的日期,比如用来表示生日,节日等具体某天,但并不表示该天的具体时间。注意:LocalDate类同样是一个不可变类。如果需要创建该类的对象,可以直接使用该类的工厂方法,示例代码如下:
LocalDate localDate = LocalDate.now();
LocalDate localDate2 = LocalDate.of(2017, 12, 31);
类似的,该类同样包含有相应地域访问和域设置的方法,简单举例如下:
int year = localDate.getYear();
int dayOfMonth = localDate.getDayOfMonth();
LocalDate localDate1 = localDate.plusYears(3);
java.time.LocalTime
java.time.LocalTime类同样是在JDK8中新引入的日期时间类。该类用来表示不含时区信息的时间,比如用来表示上午10点,下午5点等。 注意:LocalTime类同样是一个不可变类。如果需要创建该类的对象,可以直接使用该类的工厂方法,示例代码如下:
LocalTime localTime = LocalTime.now();
LocalTime localTime2 = LocalTime.of(21, 30, 59, 11001);
类似地,该类同样包含有相应地域访问和域设置的方法,简单举例如下:
LocalTime localTime = LocalTime.now();
localTime.plusHours(3);
我们可以发现,LocalDate和LocalTime是非常相似的,他们分别用来表示不含时区信息的日期和时间。
本系列文档会在本人的微信公众号发布,欢迎大家扫码关注。