ISO 8601
Joda-Timeは、 ISO8601 に従います。 週の定義 の標準 。
- 月曜日は週の最初の日です。
- 週には1〜52または53の番号が付けられます。
- 週番号は大文字の
W
で記述されます 、W23
など 。
年が追加される場合があります、2015-W23
。 - 第1週、
W01
、その年の最初の木曜日が含まれています。
私の知る限り、この標準の定義は、さまざまな国や業界での使用においてより一般的になっています。
日曜日の週
MongoDBドキュメント 週を次のように定義します:
私の知る限り、これは主にアメリカの定義であり、アメリカ以外ではあまり使用されていません。
なぜその定義は0から53と言うのですか?それは「最大54週間」を意味します。この定義で1年に54週間になるとは思いませんが、考えていません。
なぜミックスするのですか?
2つの定義を実際に混在させることはできません。なぜわざわざ?目標がMongoDBの週の定義を使用し、それらを日時で表すことである場合は、独自のコンバーターを作成してください。
私自身のアドバイスは、MongoDBの定義と機能を捨てて、標準の定義に固執することです。
日曜日を探す
MongoDBの世界で週から始まる日曜日を見つけたい場合は、独自の小さな関数を作成してください。年番号と週番号を入力して、DateTimeを取得します。このシナリオでは、Joda-Timeの年の週の機能は必要ありません。
このようなもの。
int yearNumber = 2015;
int weekNumber = 0;
LocalDate firstWeekSunday = null;
LocalDate firstOfYear = new LocalDate ( yearNumber, 1, 1 );
if ( firstOfYear.getDayOfWeek ( ) == DateTimeConstants.SUNDAY ) {
firstWeekSunday = firstOfYear;
} else { // ELSE not Sunday.
firstWeekSunday = firstOfYear.minusDays ( firstOfYear.getDayOfWeek ( ) ); // Joda-Time uses standard ISO 8601 weeks, where Monday = 1, Sunday = 7.
}
LocalDate sunday = firstWeekSunday.plusWeeks ( weekNumber );
DateTimeZone zone = DateTimeZone.forID ( "America/Montreal" );
DateTime dateTime = sunday.toDateTimeAtStartOfDay ( zone );
コンソールにダンプします。
System.out.println ( "Sunday-based week of year:" + yearNumber + " week: " + weekNumber + " starts: " + sunday + "." );
System.out.println ( "Adjusted to time zone: " + zone + " is: " + dateTime + "." );
実行時。
Sunday-based week of year:2015 week: 0 starts: 2014-12-28.
Adjusted to time zone: America/Montreal is: 2014-12-28T00:00:00.000-05:00.