Joda-Time转java.time:ZonedDateTime设空与获取毫秒问题
Joda-Time 迁移至 java.time(ZonedDateTime)问题解答
1. 为ZonedDateTime设置空值
ZonedDateTime是引用类型,直接赋值null即可完成空值设置,和Joda-Time的DateTime用法一致。但注意在后续使用stopTime前必须做非空判断,避免触发NullPointerException。
示例代码:
ZonedDateTime startTime = ZonedDateTime.now(); ZonedDateTime stopTime = null; // 初始设为空 // 业务逻辑中完成赋值 stopTime = ZonedDateTime.now(); // 计算时长前判空 if (stopTime != null) { // 执行时长计算逻辑 }
2. 获取ZonedDateTime的毫秒数并计算时长
java.time的ZonedDateTime没有getMillis()方法,需先转换为Instant(表示UTC时间线上的一个瞬时点),再调用toEpochMilli()获取从1970-01-01T00:00:00Z开始的毫秒数。
直接替换原逻辑的代码:
ZonedDateTime startTime = ZonedDateTime.now(); ZonedDateTime stopTime = ZonedDateTime.now(); long durationMilli = Math.max(1, stopTime.toInstant().toEpochMilli() - startTime.toInstant().toEpochMilli());
更规范的java.time用法:
推荐使用Duration类计算两个时间的间隔,这是java.time API设计的标准方式,可读性和健壮性更强:
ZonedDateTime startTime = ZonedDateTime.now(); ZonedDateTime stopTime = ZonedDateTime.now(); Duration duration = Duration.between(startTime, stopTime); long durationMilli = Math.max(1, duration.toMillis());
内容的提问来源于stack exchange,提问作者Peter Penzov
相关产品推荐
相关产品推荐

