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

ReadyApi中Groovy时区日期解析与UTC格式转换求助

解决带时区日期字符串转UTC格式的Groovy代码

你的原代码问题在于只截取了日期的前10位,完全丢弃了时间和时区偏移信息,导致时区转换根本没生效。比如原日期是UTC-5的2021-10-22 21:43,转UTC后其实是2021-10-23 02:43,对应的日期应该是23:Oct:2021,但你的代码会输出22:Oct:2021,这显然不对。

直接用Java 8+的java.time新日期API(Groovy完全兼容)来处理,代码更简洁且不容易出错,适合在ReadyApi里使用:

import java.time.OffsetDateTime
import java.time.ZoneOffset
import java.time.format.DateTimeFormatter
import java.util.Locale

// 输入的带时区日期字符串
def dateStr = '2021-10-22T21:43:00-05:00'
// 目标格式
def targetFormat = 'dd:MMM:yyyy'

// 1. 直接解析ISO 8601格式的带偏移日期字符串
OffsetDateTime originalDateTime = OffsetDateTime.parse(dateStr)
// 2. 转换为UTC时区的日期时间
OffsetDateTime utcDateTime = originalDateTime.withOffsetSameInstant(ZoneOffset.UTC)
// 3. 格式化为目标字符串,指定Locale为英文确保月份缩写是英文
String result = utcDateTime.format(DateTimeFormatter.ofPattern(targetFormat, Locale.ENGLISH))

log.info(result) // 输出:23:Oct:2021

代码说明:

  • OffsetDateTime.parse():自动识别ISO 8601格式的日期字符串(你的输入正好符合这个标准),不需要手动写格式模板,直接解析出带时区偏移的日期时间。
  • withOffsetSameInstant(ZoneOffset.UTC):把原时间转换为UTC时区的同一时刻,日期会根据时区偏移自动调整。
  • DateTimeFormatter.ofPattern(targetFormat, Locale.ENGLISH):指定英文Locale,避免不同环境下月份缩写变成其他语言(比如中文的"十月")。

如果一定要用旧的Date类(不推荐),也可以这样写,但代码更繁琐:

import java.text.SimpleDateFormat
import java.util.TimeZone

def dateStr = '2021-10-22T21:43:00-05:00'
def targetFormat = 'dd:MMM:yyyy'

// 解析原日期的格式模板,包含时区偏移
def inputFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX")
// 目标格式,指定UTC时区和英文Locale
def outputFormatter = new SimpleDateFormat(targetFormat, Locale.ENGLISH)
outputFormatter.setTimeZone(TimeZone.getTimeZone("UTC"))

// 解析原字符串为Date,再格式化为UTC的目标字符串
Date originalDate = inputFormatter.parse(dateStr)
String result = outputFormatter.format(originalDate)

log.info(result) // 同样输出:23:Oct:2021

推荐用第一种java.time的方案,因为旧的Date和SimpleDateFormat线程不安全,而且API设计更混乱,新手更容易出错。

内容的提问来源于stack exchange,提问作者Jakub Vlček

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 10:54:18