首页 > 解决方案 > DateTimeFormatter.format 与大陆/城市

问题描述

在我的程序中,我在文本文件中有一个日期和一个日期模式,该模式与 DateTimeFormatter 一起用于解析/格式化日期。

直到最近我的日期看起来像这样01-01-18 00.00.00,00000000 +01:00,日期模式像这样dd-MM-yy HH.mm.ss,SSSSSSSSS xxx。在我的程序开始时,我将带有模式的日期解析为 ZonedDateTime,最后我正在格式化另一个 ZonedDateTime 并覆盖文本文件中的日期,它们应该始终采用相同的格式,这与这种模式一起使用.

现在我想把它改成 useEurope/Berlin而不是+01:00,所以如果 CEST 更改为 CET 就不会出现错误的计算。

所以我的新日期看起来像这样01-01-18 00.00.00,00000000 Europe/Berlin,我的日期模式像这样dd-MM-yy HH.mm.ss,SSSSSSSSS z。现在解析仍然可以正常工作,但是当我尝试格式化 ZonedDateTime 时,输出总是以CEST而不是Europe/Berlin.

现在我想知道是否有任何方法可以实现这一点(最好没有 hacky 变通办法),以便格式化日期以大陆/城市结束。

标签: javascaladatedatetimedatetime-format

解决方案


要将时区输出为“Europe/Berlin”,请使用VV模式字母,例如:

val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS VV")
println(ZonedDateTime.now().format(formatter))
// 2018-07-05 23:12:06.901 Europe/Paris

它也可以向后工作:

val date = ZonedDateTime.parse("2018-07-05 12:00:01.123 Europe/Paris", formatter)
println(date)
// 2018-07-05T12:00:01.123+02:00[Europe/Paris]

推荐阅读