【问题标题】:Parsing ZonedDateTime independently on local timezone在本地时区独立解析 ZonedDateTime
【发布时间】:2020-03-02 20:48:51
【问题描述】:

我正在尝试解析 ZonedDateTime(或 Instant),而不必通过受本地时区影响的 LocalDate。

我希望能够做类似的事情:

val string = "2020-02-02T10:00:00"
val timeZone = ZoneId.of("Europe/Vienna")
val zoned = ZonedDateTime.parse(string, DateTimeFormatter.ISO_DATE_TIME, timeZone)

但是,甚至没有任何类似的方法 - 所有方法都需要使用 LocalDate,不幸的是,当具有不同的本地时区时会产生不同的结果。我想完全忽略本地时区,并能够仅根据给定参数创建 ZonedDateTime 或 Instant。

【问题讨论】:

  • 更正:LocalDate 没有时区,不受本地时区的影响。它只是有一个令人困惑的名字。

标签: java timezone java-time date


【解决方案1】:

你刚才输入的字符串代表本地日期时间,所以首先将其解析为LocalDateTime,然后在区域将其转换为ZoneDateTime,我不会说Instant,因为它总是代表UTC的瞬间

ZonedDateTime dateTime = LocalDateTime.parse(string,DateTimeFormatter.ISO_LOCAL_DATE_TIME)
                                      .atZone(timeZone);

【讨论】:

  • 注意:可以用ISO_LOCAL_DATE_TIME代替ofPattern(没有(大)差异)
  • 更简单:字符串 2020-02-02T10:00:00 采用 ISO 8601 格式。 LocalDateTime 解析这种格式,根本没有任何明确的格式化程序。只需使用LocalDateTime.parse(string).atZone(timeZone)
猜你喜欢
  • 2016-12-03
  • 1970-01-01
  • 2018-12-07
  • 1970-01-01
  • 2016-09-12
  • 2015-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多