什么是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单元枚举对象和它的方法以及计算不同时间对象之间的时间日期差异的例子。