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

Groovy中如何判断微秒级时间戳是否已超过1小时?

问题分析与解决方案

我看了你的代码和示例参数,问题主要出在时间单位不匹配和细节错误上,咱们一步步拆解解决:

核心问题点

  1. 1小时的时间戳数值错误:
    你的submitTime和currentTime都是纳秒级时间戳(示例数值除以1e9就能得到带毫秒的标准秒数,符合时间戳特征),但你定义的oneHhour = 3600000000——这个其实是3600秒的微秒数(3.6e9),而纳秒级的1小时应该是3600 * 1000 * 1000 * 1000 = 3600000000000,差了整整1000倍!这就是为什么你算出的差值686698092179(约686秒,11分钟)看起来不符合预期的原因——你拿11分钟和1小时的微秒数去比,当然判断逻辑会出错。

  2. 小细节问题:

    • 变量名拼写错误:oneHhour应该是oneHour(虽然不影响运行,但可读性差)
    • if语句缺少闭合的},会直接导致编译报错
    • submitTime未显式转换类型,可能因为类型不匹配引发计算异常

修正后的代码

// 获取当前时间的纳秒级时间戳,用System.currentTimeMillis()更简洁高效
long currentTime = System.currentTimeMillis() * 1000000L;
// 显式转换submitTime为long类型,确保计算时类型一致
long submitTime = job.SubmitTime as long;
// 定义1小时对应的纳秒数,用分步计算提升可读性
long oneHour = 3600 * 1000 * 1000 * 1000L;

if (currentTime - submitTime > oneHour) {
    println "${job.Name} env is up more than 1 hour";
}

额外优化建议

为了避免后续再犯单位错误,可以用常量定义时间单位,让代码更清晰:

final long NANO_PER_SECOND = 1000000000L;
final long ONE_HOUR_IN_NANOS = 3600 * NANO_PER_SECOND;

long currentTime = System.currentTimeMillis() * 1000000L;
long submitTime = job.SubmitTime as long;

if (currentTime - submitTime > ONE_HOUR_IN_NANOS) {
    println "${job.Name} env is up more than 1 hour";
}

验证示例参数

用你的测试数值计算:

  • currentTime = 1527530605357000000(纳秒)
  • submitTime = 1527529918658907821(纳秒)
  • 差值:1527530605357000000 - 1527529918658907821 = 686698092179 纳秒 = 686.698秒 ≈ 11分26秒,确实小于1小时(3600秒),不会触发打印,符合预期。

内容的提问来源于stack exchange,提问作者Loren

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:42:47