【问题标题】:Converting Javascript Date object to Java LocalDateTime将 Javascript Date 对象转换为 Java LocalDateTime
【发布时间】:2020-06-10 16:45:43
【问题描述】:

我正在尝试从 Javascript 前端到 Java 后端获取 UTC 时间。我想通过使用Date.toISOString() 并将该对象发送到Java 后端来实现这一点。然而,我注意到的一个问题是toISOString() 以YYYY-MM-DDTHH:mm:ss.sssZ 格式返回时间戳,并且这种格式与Java 8 预定义的LocalDateTime 格式化程序中的任何一个都不匹配。

我的问题是,是否有最佳实践来做我想做的事情?我知道我可以编写一个自定义 Java 格式化程序来匹配 Javascript 输出。但是,我想知道是否有一种标准方法可以完成此操作,因为这似乎很常见。

【问题讨论】:

  • LocalDateTime 在哪个时区?如果是服务器时区,请使用LocalDateTime.ofInstant(Instant.parse(dateString), ZoneId.systemDefault()) --- 你确定你想要本地日期/时间吗?
  • LocalDateTime 是在 Java 端使用的错误类。您的 ISO 字符串定义了一个时间点。 LocalDateTime 不能代表这一点。使用Instant 或ZonedDateTime。

标签: javascript java typescript datetime datetime-format


【解决方案1】:

有可用的默认 ISO 日期格式化程序。您可以使用以下

LocalDateTime date = LocalDateTime.parse(str, DateTimeFormatter.ISO_DATE_TIME);

请注意,这将假定为 UTC 时区的 LocalDateTime。

更新:根据 Andreas 的评论。

如果您希望在服务器时区获取 LocalDateTime 的实例,请使用

LocalDateTime.ofInstant(Instant.parse(str), ZoneId.systemDefault())

【讨论】:

  • 忽略时区,在这种情况下使LocalDateTime 为UTC。你怎么知道 OP 想要 local UTC 日期/时间?
  • 你说得对,ISO_DATE_TIME 确实有效!我的印象是它不会因为 Java 文档中提供的示例是 '2011-12-03T10:15:30'、'2011-12-03T10:15:30+01:00' 和 '2011- 12-03T10:15:30+01:00[欧洲/巴黎]'。我没有意识到 Z 是它会检测到的有效区域。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-26
  • 1970-01-01
  • 2011-01-31
  • 2011-04-14
  • 1970-01-01
相关资源
最近更新 更多