【问题标题】:java zoneddatetime: keep timezone ID when doing calculationsjava zoneddatetime:计算时保留时区ID
【发布时间】:2019-08-27 09:19:57
【问题描述】:

我有一些无痛的小脚本代码(一种 Groovy 方言,它本身基于 Java),可以解析一些带有 zone-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)

对于大多数输入,我使用的结果都很好: 2019-08-27 11:05:00 (Europe/Amsterdam) 给出 2019-09-03 11:05:00 (Europe/Amsterdam),相似日期相同。

但是,如果我输入2019-03-29 11:05:00 (Europe/Amsterdam),则输出变量设置为2019-04-05 12:05:00 (CEST)

值本身没问题,但时区名称更改为CEST(中欧夏令时间)。这是正确的,但在我的脚本的下一步中不再可以解析,它需要像 Europe/Amsterdam 这样的 id

那么我怎样才能得到2019-04-05 12:05:00 (Europe/Amsterdam)

【问题讨论】:

  • @Abra 是的,VV 正是我所需要的,谢谢!你是对的,它不是严格意义上的java。它是无痛的(由 elasticsearch 使用),这是我理解的 Groovy 方言(我对 Groovy 本身没有经验)。
  • @Abra 如果你关心它:如果你把它变成一个,我会接受你的回答

标签: java datetime groovy elasticsearch-painless zoneddatetime


【解决方案1】:

我建议使用不同的格式模式来打印结果。尝试使用VV 而不是zzz

根据the documentation 小写z 将为您提供时区名称,例如太平洋标准时间或PST。对于 America/Los_Angeles 等时区 ID,您需要大写的 V。并且:

如果字母数为 2,则输出时区 ID。任何 其他字母计数抛出IllegalArgumentException

【讨论】:

    猜你喜欢
    • 2016-12-03
    • 2022-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多