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

Groovy日期时间比对容差设置及UTC格式输出问题咨询

问题根因
  • Groovy/Java 底层的java.util.Date对象本身不存储时区信息,仅存储自1970-01-01 00:00:00 UTC 算起的毫秒级时间戳
  • 直接打印Date对象时,默认会调用Date.toString()方法,该方法会读取JVM的系统默认时区(你的环境默认是EEST时区)格式化输出,和你解析时间时指定的UTC时区没有关联,所以不会按UTC格式输出
修复方案

方案1:打印时显式指定UTC时区(无侵入,推荐)

不要直接输出Date对象,使用格式化工具指定UTC时区后再打印,示例代码如下:

// 初始化UTC格式器
def utcFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'")
utcFormatter.timeZone = TimeZone.getTimeZone("UTC")

// 打印时调用format方法转换
def dueDate = ... // 你解析得到的Date对象
println utcFormatter.format(dueDate) // 输出为UTC格式

注意:你解析yyyy-MM-dd'T'HH:mm:ss'Z'格式的UTC时间字符串时,也必须给解析用的DateFormat设置UTC时区,否则会用默认时区解析,得到的时间戳本身就存在偏差。

方案2:全局修改JVM默认时区(影响全脚本逻辑,谨慎使用)

在脚本最开头统一设置JVM默认时区为UTC,后续所有直接打印Date对象的操作都会默认输出UTC格式:

TimeZone.setDefault(TimeZone.getTimeZone("UTC"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:27:03