[英]How to get the YEAR for week of year for a date?
我知道Calendar.WEEK_OF_YEAR
可用於獲取給定日期的“一年中的第幾周”,但如何獲取相應的 YEAR?。
我知道Week of Year 的定義取決於Locale
。 我最感興趣的是 DIN 1355-1 / ISO 8601 / 德國解決方案(但我不想將其作為修復實施) 。
所以 1 月 1 日可能屬於:
我的問題是今年如何獲得?*
Date date =
Calender calendar = new GregorianCalendar(Locale.GERMAN)
calendar.setTime(date);
int weekOfYear = calendar.get(Calendar.WEEK_OF_YEAR);
int year = ???? <------------
System.out.println(date + " is in " + weekOfYear + " of " + year);
* 解決方案不是: date.getYear
、 date.getFirstDayOfWeek.getYear
或date.getLastDayOfWeek.getYear
您應該使用 Java 8 及更高版本中內置的java.time框架。 避免舊的和臭名昭著的麻煩 java.util.Date/.Calendar 類。
這些新的 java.time 類包括LocalDate
,用於沒有日期時間或時區的僅日期值。 請注意,您必須指定一個時區來確定“今天”,因為世界各地的日期不同時。
ZoneId zoneId = ZoneId.of ( "America/Montreal" );
ZonedDateTime now = ZonedDateTime.now ( zoneId );
IsoFields
類根據 ISO 8601 標准提供信息,包括基於周的一年中的一周。
int calendarYear = now.getYear();
int weekNumber = now.get ( IsoFields.WEEK_OF_WEEK_BASED_YEAR );
int weekYear = now.get ( IsoFields.WEEK_BASED_YEAR ); // Answer to Question
在一年的開始/結束時,基於周的年份可能與日歷年相差 ±1。 例如,請注意 2015 年底公歷和 ISO 8601 日歷之間的差異:第 52 周和第 1 周變為第 52 周和第 53 周。
Java 8 或更高版本?
請參閱Basil Bourque 的回答以使用 Java 的java.time API。
否則(三思而后行)請參閱我在這個問題中提出的使用過時的 Java API 的原始答案。
Java 8 之前?
calendar.getWeekYear();
為您給出的示例返回2015
。
請參閱GregorianCalendar#getWeekYear()和week year的 API 文檔。
以供參考
Calendar calendar = new GregorianCalendar(Locale.GERMAN);
calendar.set(2016, Calendar.JANUARY, 1, 0, 0, 0);
Date date = calendar.getTime();
int weekOfYear = calendar.get(Calendar.WEEK_OF_YEAR);
int year = calendar.getWeekYear();
System.out.println(date + " is in " + weekOfYear + " of " + year);
回報
Fri Jan 01 00:00:00 CET 2016 is in 53 of 2015
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.