在舊的Java解析從字符串年和週日期我能做到那樣:如何使用java.time
System.out.println(new SimpleDateFormat("yyyy w", Locale.UK).parse("2015 1"));
// shows Mon Dec 29 00:00:00 CET 2014
System.out.println(new SimpleDateFormat("yyyy w", Locale.US).parse("2015 1"));
// shows Mon Dec 28 00:00:00 CET 2014
我想在Java中8
使用java.timeSystem.out.println(LocalDate.parse("2015 1", DateTimeFormatter.ofPattern("yyyy w", Locale.US)));
結果:
java.time.format.DateTimeParseException:文本 '2015 1' 無法解析:無法從TemporalAccessor獲得LOCALDATE:{WeekOfWeekBasedYear [WeekFields [星期日,1] = 1,年份= 2015},類型爲java.time.format的ISO .Parsed
如何在java.time中做到這一點?
此外,我不滿意我必須通過Locale來確定星期幾的第一天:星期一和星期日。這不是國家特色,而是日曆功能。我想用類似java.time.temporal.WeekFields.ISO世界週一顯示,本週開始
我發現了類似的情況:https://stackoverflow.com/questions/3941700/how-to-get-dates-of-a-week-i-know-week-number
但不是在Java 8 java.time此外,首先創建日期對象並稍後設置正確周的解決方案並不高雅。我想一次創建最終日期。
廣告c)我不是精確的。我的意思是,當我想使用自定義的星期一/星期天設置時,我不應該使用Locale,其中星期定義爲我想要但明確定義什麼是星期幾。建議的回答(用Locale.ROOT)爲100%,我問 – michaldo
我申請解決2016年: 的System.out.println( LocalDate.parse( 「2016 1」, 新DateTimeFormatterBuilder()appendPattern(」 YYYY w「) .parseDefaulting(ChronoField.DAY_OF_WEEK,1) .toFormatter()。withLocale(Locale.ROOT))); //輸出:2015-12-28 爲什麼我得到了2015-12-28?我期待2016-01-04,因爲2016年的第一週是1月4日至10日 – michaldo
@michaldo非常感謝您的反饋。我改變了我的回答,寧願選擇第二種解決方案。它仍然適用於'2016-1'產生'2016-01-04'的結果。看來我們在JSR-310-API中遇到了一些奇怪的現象。 –