java8 - ChronoUnit实例

711 阅读4分钟

什么是java中的ChronoUnit?

java.time.temporal.ChronoUnit是java8中引入的一个枚举类。它是用来衡量时间的Years,Months,Weeks,Days,Hours,Minutes,Seconds,Microseconds,Nanoseconds 。在java8之前,开发者使用整数值来表示天、周、小时等。在java8版本中,这些整数值用ChronoUnit 枚举常量表示。它实现了TemporalUnit 接口。

它包含以下常量:

  • 纳数
  • 微量级
  • 毫秒
  • 小时
  • 半天
  • 天数
  • 几十年
  • 百年
  • 千年
  • 纪元
  • 永远

一些方法

  • values(): 返回带有枚举常量的ChronoUnit 数组。
  • isDateBased()。它检查被检查单位是否基于日期单位。
  • isTimeBased(): 检查被检查单位是否基于时间单位。
  • isSupportedBy()如果给定的单位被时间单位所支持
  • between()方法计算两个时间对象之间的时间,时间以测量单位的长度返回
  • isDurationEstimated()根据时间估计单位返回真或假。
  • getDuration()返回以ISO时间单位表示的持续时间对象单位。

它在日期和时间API中用于计算以下事项

  • 之前的特定时间
  • 之后的具体时间
  • 两个日期之间的许多天、年、月、小时、分钟、秒,并返回单位范围。

ChronoUnit示例

我们将看到java.time.temporal.ChronoUnit类的各种使用案例

以秒为单位显示所有的ChronoUnits

这是一个可用的ChronoUnit和它们的测量单位(秒)的例子。

 for (ChronoUnit unit : ChronoUnit.values()) {  
         Duration duration=unit.getDuration();  
            System.out.println(unit+" is of seconds:"+duration.getSeconds());  
        }

输出是

Nanos is of seconds:0  
Micros is of seconds:0  
Millis is of seconds:0  
Seconds is of seconds:1  
Minutes is of seconds:60  
Hours is of seconds:3600  
holidays is of seconds:43200  
Days is of seconds:86400  
Weeks is of seconds:604800  
Months is of seconds:2629746  
Years is of seconds:31556952  
Decades is of seconds:315569520  
Centuries is of seconds:3155695200  
Millennia is of seconds:31556952000  
Eras is of seconds:31556952000000000  
Forever is of seconds:9223372036854775807  

这是一个向LocaldateTime添加和减去测量单位的例子。

LocalDateTime now = LocalDateTime.now();  
// date time 5 days ago  
LocalDateTime localDateTime1 = now.minus(5, ChronoUnit.DAYS);  
System.out.println(localDateTime1);  
//  date time 5 years ago  
LocalDateTime localDateTime2 = now.minus(5, ChronoUnit.YEARS);  
System.out.println(localDateTime2);  
// date time 10 days after  
LocalDateTime localDateTime3 = now.plus(5, ChronoUnit.DAYS);  
System.out.println(localDateTime3);  
//  date time 4 months after  
LocalDateTime localDateTime4 = now.plus(4, ChronoUnit.MONTHS);  
System.out.println(localDateTime4);  

上述代码执行的输出是

2018-08-22T23:00:36.011362100  
2013-08-27T23:00:36.011362100  
2018-09-01T23:00:36.011362100  
2018-12-27T23:00:36.011362100  

这是一个寻找两个[LocalDate)(/java8-ten-localdate-examples) 对象之间的年份的例子。

使用ChronoUnit.YEARS.between()方法返回日期之间的年数。

LocalDate dob = LocalDate.of(1980, Month.AUGUST, 24);  
LocalDate dateNow = LocalDate.now();  
long numerOfYears = ChronoUnit.YEARS.between(dob, dateNow);  
System.out.println(numerOfYears);  

输出是

2018-08-22T23:00:36.011362100  
2013-08-27T23:00:36.011362100  
2018-09-01T23:00:36.011362100  
2018-12-27T23:00:36.011362100  

这是一个查找两个Localdates之间的天数的例子。
使用ChronoUnit.DAYS.between()方法返回日期之间的天数。

LocalDate dob = LocalDate.of(1980, Month.AUGUST, 24);  
LocalDate dateNow = LocalDate.now();  
long numberOfDays = ChronoUnit.DAYS.between(dob, dateNow);  
System.out.println(numberOfDays);  

输出为

38  

这是一个寻找两个日期之间的微观时间细节的例子。
ChronoUnit.between()方法用微观细节给出所有微观时间信息。

LocalDateTime dateTime = LocalDateTime.of(2017, 1, 1, 0, 0);  
LocalDateTime dateTime1 = LocalDateTime.now();  
System.out.println("Differnce in Nano seconds" + ChronoUnit.NANOS.between(dateTime, dateTime1));  
System.out.println("Differnce in Milli seconds" + ChronoUnit.MILLIS.between(dateTime, dateTime1));  
System.out.println("Differnce in  seconds" + ChronoUnit.SECONDS.between(dateTime, dateTime1));  
System.out.println("Differnce in  minutes" + ChronoUnit.MINUTES.between(dateTime, dateTime1));  
System.out.println("Differnce in  hours" + ChronoUnit.HOURS.between(dateTime, dateTime1));  

输出为

  
Differnce in Nano seconds52184462355462300  
Differnce in Milli seconds52184462355  
Differnce in  seconds52184462  
Differnce in  minutes869741  
Differnce in  hours14495  

同样的例子可以用java.time.Duration
java.time.Duration例子来写 ,以获得两个日期之间的小时/分钟/秒/毫/纳米

java.time.Duration.between()方法被用来获取微观时间的细节。

LocalDateTime dateTime = LocalDateTime.of(2017, 1, 1, 0, 0);  
LocalDateTime dateTime1 = LocalDateTime.now();  
System.out.println("Differnce in Nano seconds" + java.time.Duration.between(dateTime, dateTime1).getNano());  
System.out.println("Differnce in Milli seconds" + java.time.Duration.between(dateTime, dateTime1).toMillis());  
System.out.println("Differnce in  seconds" + java.time.Duration.between(dateTime, dateTime1).getSeconds());  
System.out.println("Differnce in  minutes" + java.time.Duration.between(dateTime, dateTime1).toMinutes());  
System.out.println("Differnce in  hours" + java.time.Duration.between(dateTime, dateTime1).toHours());  

输出是

Differnce in Nano seconds156614800  
Differnce in Milli seconds52183108156  
Differnce in  seconds52183108  
Differnce in  minutes869718  
Differnce in  hours14495  

结论

你学会了Chrono单元枚举对象和它的方法以及计算不同时间对象之间的时间日期差异的例子。