3

Javaの日付があります:tempDate = Sun Jan 01 00:00:00 GMT + 01:002012。

新しい日付、つまりtempDateの年の最初の週の最初の日を作成したいと思います。

あれは:

  Mon Jan 02 00:00:00 GMT+01:00 2012

Joda Timeを使おうとすると:

DateTime cal = new DateTime(tempDate).withWeekOfWeekyear(1).
                     withDayOfWeek(DateTimeConstants.MONDAY);

私は欲しいものを手に入れましたが、前年には:

Mon Jan 03 00:00:00 GMT+01:00 2011

Joda Timeでこれを機能させるにはどうすればよいですか?

4

2 に答える 2

8

DateTime の年とその週の年の違いを理解する必要があります。

Joda-Timeでは、ISO 8601 標準に従って、月曜日が週の最初の曜日です。しかし、年は常に月曜日に始まるわけではありません。年の最初の週は、ISO 標準に従って、その年の最初の木曜日を含む週です。その結果、ある年の特定の日が、前年または翌年の週に分類される場合があります。

あなたの例では、2012 年 1 月 1 日は実際にはそのような日です。これは 2011 年の第 52 週に属します。したがって、その年 (2012) はその週の年 (2011) とは異なります。したがって、日付をその週の年の最初の週に変更すると、2011 年の最初の週のDateTimeが取得されます。

これを一貫して機能させるには、週の年が年と同じであることを確認するだけです。

DateTime onTheFirstDayOfTheFirstWeek = dateTime.withWeekyear(dateTime.getYear()).withWeekOfWeekyear(1).withDayOfWeek(1);

ところで、コメントの回避策は一貫して機能しません。具体的には、システム時間が週の年とは異なる年になると失敗します。

于 2013-02-18T14:11:03.133 に答える