【问题标题】:How can I sum up two ZoneOffset's?如何总结两个 ZoneOffset?
【发布时间】:2018-06-08 07:24:52
【问题描述】:

我有两个从字符串解析的ZoneOffset 对象。如何总结并申请ZonedDateTime

例如:
原始 ZonedDateTime 是2017-12-27T18:30:00,第一个偏移量是+03,第二个偏移量是+05

如何获得2017-12-28T18:30:00+08:002017-12-28T10:30:00 的输出?

【问题讨论】:

  • 这没有任何逻辑意义,不是吗?添加区域似乎不正确,您为什么要这样做?
  • 我有偏移量的数据数组不是 GMT+0,我必须以某种方式处理它。
  • 不过,这没有任何意义。唯一合理的做法是在时区之间转换 日期。但是 +03 +05 导致 +08 没有任何意义。
  • “我必须以某种方式处理它”并没有明确要求。因为除其他外,5 + 3 不是 11;那是错字吗,还是我们应该通过某种方式了解您的要求,以便我们知道如何从这些输入中提取 11 个?
  • 是的,我需要将已经有偏移的日期转换为另一个参数化的时区。

标签: java datetime java-time timezone-offset zoneddatetime


【解决方案1】:

我这样理解您的问题(请检查是否正确):您有一个 ZonedDateTime,通常与 UTC 有偏差。我会称之为dateTimeWithBaseOffset。你还有另一个ZonedDateTime,其偏移量相对于前一个ZonedDateTime 的偏移量。这确实是不正确的;该课程的设计者决定偏移量来自 UTC,但有人使用它与预期不同。我会打电话给后者dateTimeWithOffsetFromBase

如果你能用非正统的偏移量修复产生dateTimeWithOffsetFromBase 的代码,那当然是最好的。我假设现在这不是您可以使用的解决方案。因此,您需要将不正确的偏移量更正为与 UTC 的偏移量。

还不错:

    ZoneOffset baseOffset = dateTimeWithBaseOffset.getOffset();
    ZoneOffset additionalOffset = dateTimeWithOffsetFromBase.getOffset();
    ZoneOffset correctedOffset = ZoneOffset.ofTotalSeconds(baseOffset.getTotalSeconds()
            + additionalOffset.getTotalSeconds());

    OffsetDateTime correctedDateTime = dateTimeWithOffsetFromBase.toOffsetDateTime()
            .withOffsetSameLocal(correctedOffset);
    System.out.println(correctedDateTime);

使用您打印的示例日期时间

2017-12-28T18:30+08:00

如果您想要 UTC 时间:

    correctedDateTime = correctedDateTime.withOffsetSameInstant(ZoneOffset.UTC);
    System.out.println(correctedDateTime);

这会打印您要求的日期时间:

2017-12-28T10:30Z

对于带有偏移量的日期时间,我们不需要使用ZonedDateTimeOffsetDateTime 会这样做并且可以更好地向读者传达我们正在做的事情(ZonedDateTime 也可以) .

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多