簡體   English   中英

如何獲得一年中某一周的年份?

[英]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 日可能屬於:

  • 新年 (1) 的第一周:例如 2015-01-01 是 2015 年第一周
  • 前一年 (53) 年的最后一周:例如 2016-01-01 在2015年第 53 年的那一周

我的問題是今年如何獲得?*

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.getYeardate.getFirstDayOfWeek.getYeardate.getLastDayOfWeek.getYear

java.time

您應該使用 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM