2 回答

TA貢獻2003條經驗 獲得超2個贊
FormatStyle.LONG
你必須使用:
ZonedDateTime.now()
代替 :
LocalDateTime.now()
因為ZonedDateTime
給了你很多細節,而不是像LocalDateTime
.
使用FormatStyle.LONG
時,格式化程序會搜索其他信息,例如ZoneId
其中未找到的信息LocalDateTime
,因此您會遇到異常。

TA貢獻1943條經驗 獲得超7個贊
博士
對此有什么好的解釋嗎?
是的。
LONGandFULL格式需要時區或與 UTC的偏移量。您LocalDateTime 缺少任何區域或偏移量。
您的使用LocalDateTime.now不正確。Instant您應該只使用(或OffsetDateTime/ )捕捉當前時刻ZonedDateTime。
Instant.now() // Capture the current moment as seen in UTC.
要更靈活地生成字符串,請使用OffsetDateTimeor ZonedDateTime。
ZonedDateTime.now(
ZoneId.of( "Pacific/Auckland" )
)
.format(
DateTimeFormatter.ofLocalizedDateTime(
FormatStyle.LONG // Or `FULL`.
)
.withLocale( Locale.ITALY )
)
新西蘭時間 2019 年 3 月 6 日上午 10:22:23
并且,與FormatStyle.FULL:
新西蘭夏令時間 2019 年 3 月 6 日,星期三 10:23:25 AM
LocalDateTime不是片刻_
LocalDateTime課程只是一個日期和一天中的時間。它故意缺少任何時區或與 UTC 偏移的概念。因此,根據定義,它不能代表片刻。
從不打電話LocalDateTime.now()
LocalDateTime.now();
永遠不要這樣做,永遠不要打電話now。LocalDateTime我想不出任何實際情況會要求這樣做。
LocalDateTime跟蹤時刻時切勿使用。ALocalDateTime只是日期和時間,僅此而已。如果沒有時區或從 UTC 偏移的上下文, aLocalDateTime不能代表時刻。它代表了大約 26-27 小時范圍內的潛在時刻,即全球當前的時區范圍。
ALocalDateTime就像說“今年1月23日中午”。你是指日本東京的中午還是印度加爾各答的中午?或者也許是法國巴黎?蒙特利爾魁北克?這些不同地方的中午發生在不同的時刻,每個時刻都經過了幾個小時。
這里的“本地”是LocalDateTime指任何一個地方,或每個地方,但并不意味著任何特定的地方。
添加回答
舉報