web-dev-qa-db-ja.com

特定の日付がある場合、前週のその日の日付を取得するにはどうすればよいですか?

最新の回答については、@ Basil Bourqueの回答をご覧ください


たとえば、 "Date"変数 "date1"の値が(dd/mm/yyy)03/07/2011の場合、これは日曜日です。前の日曜日の「日付」「日付2」を取得するにはどうすればよいですか?値は(dd/mm/yyyy)26/06/2011になります。

それを行う簡単な方法はありますか、例えば:

疑似コード:

Date date1 = (03/07/2011);
Date date2 = date1.subtractNumberOfDays(7);
12
Ian

tl; dr

LocalDate.of( 2011 , Month.JULY , 3 )
         .minusWeeks( 1 ) 

2011-06-26

Java.time

質問と回答は古い時代遅れの日時クラスを使用しています。代わりに、Java.timeクラスを使用してください。

LocalDate

LocalDateクラスは、時刻とタイムゾーンなしの日付のみの値を表します。

LocalDate localDate = LocalDate.of( 2011 , Month.JULY , 3 ); 

または、Month enumの代わりに2番目の引数で整数を渡します。 1月〜12月は1〜12を渡します。

前の週

日付から1週間を引くことができます。

LocalDate weekPrior = localDate.minusWeeks( 1 );

これをご覧ください コードはIdeOne.comでライブ配信されます

前の曜日

特定の曜日が必要な場合は、 TemporalAdjuster を使用します。

TemporalAdjusters クラスで提供されるいくつかのそのような便利な実装(複数形の 's'に注意してください)。

LocalDate priorTuesday = localDate.with( TemporalAdjusters.previous( DayOfWeek.TUESDAY ) ) ;

Java.timeについて

Java.time フレームワークはJava 8以降に組み込まれています。これらのクラスは、面倒な古い レガシー のような日時クラスに取って代わります- Java.util.DateCalendar 、& SimpleDateFormat

Joda-Time プロジェクトは現在 maintenance mode であり、 Java.time クラスへの移行を推奨しています。

詳細については、 Oracleチュートリアル を参照してください。また、スタックオーバーフローで多くの例と説明を検索してください。仕様は JSR 31 です。

Java.timeクラスはどこで入手できますか?

ThreeTen-Extra プロジェクトは、追加のクラスでJava.timeを拡張します。このプロジェクトは、Java.timeに将来追加される可能性があることを証明する場です。 IntervalYearWeekYearQuarter のようないくつかの便利なクラスがここにあります。 、および more

9
Basil Bourque

カレンダーを使用する必要があります:

    Calendar date = new GregorianCalendar(2011, Calendar.JULY, 3);
    date.add(Calendar.DAY_OF_MONTH, -7);
    System.out.println(date.getTime());

日付からカレンダーを作成することもできます:

    Date date1 = new Date(111, Calendar.JULY, 3);//the year field adds 1900 on to it.
    Calendar date = new GregorianCalendar();
    date.setTime(date1);
    date.add(Calendar.DAY_OF_MONTH, -7);
    date2 = date.getTime();

注意:

  • Javaは0を使用して1月を表します。
  • 日付(年、月、日)はJDKバージョン1.1以降非推奨です!

GregorianCalendar JavaDocを参照してください。

デフォルトのロケールでデフォルトのタイムゾーンに指定された日付が設定されたGregorianCalendarを構築します。パラメータ:yearカレンダーのYEARカレンダーフィールドの設定に使用される値。カレンダーでMONTHカレンダーフィールドを設定するために使用される値。月の値は0ベースです。例:1月の場合は0。 dayOfMonthカレンダーのDAY_OF_MONTHカレンダーフィールドを設定するために使用される値。

33
Petar Ivanov

より明確なアプローチ:

Calendar date = new GregorianCalendar(2011, 1, 1);
date.add(Calendar.WEEK_OF_MONTH, -1);
System.out.println(date.getTime());

WEEK_OF_MONTHまたはWEEK_OF_YEARを使用します

4
Thresh

ジョーダ時間 を使用する場合は、非常に簡単です。

例:

DateTime toDay=new DateTime();
DateTime dateOfPreviousWeek=toDay.minusDays(7);

別の:

DateTime toDay = new DateTime(2011, 7, 1, 0, 0, 0, 0);
DateTime dateOfPreviousWeek = toDay.minusDays(7);

得られる Java.util.Date DateTimeから:

Date javaDate=jodaDateTime.toDate();
4
Tapas Bose