【问题标题】:Java 8 Time - Convert Javascript's Date().getTimezoneOffset to ZoneOffsetJava 8 时间 - 将 Javascript 的 Date().getTimezoneOffset 转换为 ZoneOffset
【发布时间】:2020-01-21 15:22:02
【问题描述】:

在我的网络应用程序中,允许用户选择像“8:15pm”这样的时间和像“星期三”这样的日子。当它被发送到服务器时,我正在使用 Javascript 方法发送字符串“8:15pm”、“Wednesday”和时区信息

new Date().getTimezoneOffset()

这将返回从 UTC 开始的偏移量(以分钟为单位)。如何将 360(6 小时)之类的内容转换为 ZoneOffset,以便计算正确的 OffsetDateTime?是否有一种实用方法可以将小时数和基本 ZoneOffset 转换为新的 ZoneOffset?

【问题讨论】:

  • 你的意思是像ZoneOffset.ofHours()
  • ZoneOffset.ofTotalSeconds(360*60) 呢?
  • 是的,@SeanBright,这就是我想要的。不知道我怎么错过了。你想把它写下来作为答案。
  • @Michael 这也是一种 Javascript 方法。
  • 很公平,感谢您的编辑

标签: java java-8 java-time


【解决方案1】:

只是想一想,您可以将当前时间(以毫秒或纳米为单位)发送到服务器,这将是 64 位或 8 个字节,而不是发送可变长度的字符串,并伴随使用另一个字节的区域休息时间,或如果你真的想要,几位。

另外,正如另一位用户提到的,您可以使用 ZoneOffset#ofHours 和其他有用的工厂方法创建 ZoneOffset。

ZoneOffset offset = ZoneOffset.ofHours(6);

如何转换为 ZonedDateTime 的示例

int offsetHours = 6; // receive from client

long millis = System.currentTimeMillis(); // received from client

ZoneOffset offset = ZoneOffset.ofHours(offsetHours);

ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(Instant.ofEpochMilli(millis), offset);

【讨论】:

  • @Michael 正确,有些是半小时。我最终使用了 ZoneOffset zoneOffset = ZoneOffset.ofTotalSeconds(timezoneOffset * 60);作为我的解决方案(其中 timzoneOffset 是 Javascript 调用的分钟数)
  • 非常不错的收获!干得好。
【解决方案2】:

java.util.Date 类方法

getTimezoneOffset()

和javascript Date类方法

getTimezoneOffset()

产生相同的输出,它以分钟为单位给出从给定时间到达 GMT/UTC 时间的偏移值。

例如对于

IST(UTC +5:30)

我们从 UTC/GMT 得到 (5*60)+30 = 330 分钟,偏移值为 -330

int timeZoneOffset = new Date().getTimezoneOffset(); // for IST(UTC +5:30), we get -330

ZoneOffset.ofTotalSeconds(-1*timeZoneOffset*60) // provides correct the ZoneOffset +05:30

【讨论】:

    猜你喜欢
    • 2015-12-14
    • 2016-04-03
    • 1970-01-01
    • 1970-01-01
    • 2016-11-27
    • 1970-01-01
    • 2023-03-23
    • 2023-03-26
    • 1970-01-01
    相关资源
    最近更新 更多