如何在Groovy脚本中将UTC时区时间转换为CET时区时间
Groovy 时区转换实现方案
以下为可直接运行的实现代码,基于Java 8+ 内置的java.time包(Groovy原生兼容),是当前最优实现方案:
import java.time.ZonedDateTime import java.time.ZoneId import java.time.format.DateTimeFormatter // 输入UTC时间字符串 def inputUtcStr = '2021-08-31T22:00:00Z' // 解析为UTC时区的ZonedDateTime对象 ZonedDateTime utcTime = ZonedDateTime.parse(inputUtcStr) // 转换为CET时区时间 ZonedDateTime cetTime = utcTime.withZoneSameInstant(ZoneId.of("CET")) // 按要求格式输出 def outputDate = cetTime.format(DateTimeFormatter.ofPattern("dd-MM-yyyy")) println outputDate // 样例输入的输出结果为:01-09-2021
注意事项
- 时区标识优先选择区域ID:如果运行环境存在时区简写兼容问题,可以替换
"CET"为对应区域标准ID,比如"Europe/Paris"、"Europe/Berlin",覆盖CET时区的区域标识可保证转换精度。 - 日期格式符大小写严格区分:
dd代表当月日期,大写DD代表年积日(一年的第几天)MM代表月份,小写mm代表分钟yyyy代表公历年,大写YYYY代表周年(跨年周会出现年份偏移问题)
严格按照上述格式符编写才能得到符合DD-MM-YYYY样式的输出结果。
兼容Java 8之前版本的旧实现
如果运行环境依赖的Java版本低于8,可以使用SimpleDateFormat实现:
import java.util.TimeZone import java.text.SimpleDateFormat def inputUtcStr = '2021-08-31T22:00:00Z' // 配置UTC解析格式 def utcFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'") utcFormatter.setTimeZone(TimeZone.getTimeZone("UTC")) Date date = utcFormatter.parse(inputUtcStr) // 配置CET输出格式 def cetFormatter = new SimpleDateFormat("dd-MM-yyyy") cetFormatter.setTimeZone(TimeZone.getTimeZone("CET")) def outputDate = cetFormatter.format(date) println outputDate
内容的提问来源于stack exchange,提问作者GOPAL_KS
相关产品推荐
相关产品推荐

