亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Locale 格式化 LocalDateTime 實例時獲取

使用 Locale 格式化 LocalDateTime 實例時獲取

慕虎7371278 2022-07-20 12:09:14
這對我來說不是很清楚。出于某種原因,當我嘗試使用 格式化LocalDateTime實例DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG).withLocale(...)時,出現異常:java.time.DateTimeException:無法提取值:類 java.time.LocalDateTime例如,只有在我使用FormatStyle.LONG,時才會發生這種情況FormatStyle.MEDIUM。這是我的測試:@Testpublic void dateTest() {    LocalDateTime now = LocalDateTime.now();    // this is ok. prints a value    System.out.println("LocalDateTime now (formatted with locale): "            + now.format(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM)                                                       .withLocale(new Locale("it"))));    // this fails with java.time.DateTimeException: Unable to extract value: class java.time.LocalDateTime    // only if FormatStyle.LONG (as it is now)    System.out.println("LocalDateTime now (formatted with locale): "            + now.format(DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG)                                                       .withLocale(new Locale("it"))));}對此有什么好的解釋嗎?
查看完整描述

2 回答

?
湖上湖

TA貢獻2003條經驗 獲得超2個贊

FormatStyle.LONG你必須使用:

ZonedDateTime.now()

代替 :

LocalDateTime.now()

因為ZonedDateTime給了你很多細節,而不是像LocalDateTime.

使用FormatStyle.LONG時,格式化程序會搜索其他信息,例如ZoneId其中未找到的信息LocalDateTime,因此您會遇到異常。


查看完整回答
反對 回復 2022-07-20
?
楊__羊羊

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指任何一個地方,或每個地方,但并不意味著任何特定的地方。


查看完整回答
反對 回復 2022-07-20
  • 2 回答
  • 0 關注
  • 262 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號