java ZoneDateTime:在进行计算时保留时区ID
我有一些无痛的小脚本代码(Groovy方言,它本身是基于Java的),它用区域id解析一些时间戳。 但是,在执行涉及跨越夏令时边界的计算时,时区id会更改 可复制示例:java ZoneDateTime:在进行计算时保留时区ID,java,datetime,groovy,elasticsearch-painless,zoneddatetime,Java,Datetime,Groovy,elasticsearch Painless,Zoneddatetime,我有一些无痛的小脚本代码(Groovy方言,它本身是基于Java的),它用区域id解析一些时间戳。 但是,在执行涉及跨越夏令时边界的计算时,时区id会更改 可复制示例: def form=DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss (zzz)") in=ZonedDateTime.parse(input, form) out_plusweek=in.plusHours(168).format(form) 对于大多数输入,我的工作结果很好:
def form=DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss (zzz)")
in=ZonedDateTime.parse(input, form)
out_plusweek=in.plusHours(168).format(form)
对于大多数输入,我的工作结果很好:
2019-08-27 11:05:00(欧洲/阿姆斯特丹)
给出了2019-09-03 11:05:00(欧洲/阿姆斯特丹)
,类似日期相同
但是,如果我输入2019-03-29 11:05:00(欧洲/阿姆斯特丹)
,则输出变量设置为2019-04-05 12:05:00(CEST)
该值本身正常,但时区名称更改为CEST
(中欧夏季时间)。这是正确的,但在我的脚本的下一步中不再可以解析,它需要一个像Europe/Amsterdam
那么,我如何才能获得
2019-04-05 12:05:00(欧洲/阿姆斯特丹)
?我建议使用不同的格式模式打印结果。尝试使用VV
而不是zzz
根据小写字母z
将为您提供时区名称,如太平洋标准时间或太平洋标准时间。对于时区ID,如America/Los_Angeles,您需要大写V
。以及:
如果字母数为2,则输出时区ID。任何
其他字母计数引发非法argumentException
@艾布拉:是的,
VV
是我需要的,谢谢!你是对的,它不是严格意义上的java。它是无痛的(由elasticsearch使用),据我所知,这是一种Groovy方言(我对Groovy本身没有经验)。@Abra如果你关心它:如果你把它变成一个,我会接受你的答案