You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 22:47:15