最新の回答については、@ 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);
LocalDate.of( 2011 , Month.JULY , 3 )
.minusWeeks( 1 )
2011-06-26
質問と回答は古い時代遅れの日時クラスを使用しています。代わりに、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 8以降に組み込まれています。これらのクラスは、面倒な古い レガシー のような日時クラスに取って代わります- Java.util.Date
、 Calendar
、& SimpleDateFormat
。
Joda-Time プロジェクトは現在 maintenance mode であり、 Java.time クラスへの移行を推奨しています。
詳細については、 Oracleチュートリアル を参照してください。また、スタックオーバーフローで多くの例と説明を検索してください。仕様は JSR 31 です。
Java.timeクラスはどこで入手できますか?
ThreeTen-Extra プロジェクトは、追加のクラスでJava.timeを拡張します。このプロジェクトは、Java.timeに将来追加される可能性があることを証明する場です。 Interval
、 YearWeek
、 YearQuarter
のようないくつかの便利なクラスがここにあります。 、および more 。
カレンダーを使用する必要があります:
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();
注意:
GregorianCalendar JavaDocを参照してください。
デフォルトのロケールでデフォルトのタイムゾーンに指定された日付が設定されたGregorianCalendarを構築します。パラメータ:yearカレンダーのYEARカレンダーフィールドの設定に使用される値。カレンダーでMONTHカレンダーフィールドを設定するために使用される値。月の値は0ベースです。例:1月の場合は0。 dayOfMonthカレンダーのDAY_OF_MONTHカレンダーフィールドを設定するために使用される値。
より明確なアプローチ:
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
を使用します
ジョーダ時間 を使用する場合は、非常に簡単です。
例:
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();