TL; DR
簡単、java.timeと。第三木曜日のために
:ジャワの最も初期のバージョンに同梱
LocalDate.now().with( // Get today's date, then adjust.
TemporalAdjusters.dayOfWeekInMonth(3 , DayOfWeek.THURSDAY) // Define adjuster to move to third Thursday of same month.
) // Instantiates another `LocalDate` object (java.time uses immutable objects).
java.time
面倒古い日時のクラスは今java.timeクラスに取って代わられ、廃止されました。
LocalDate
クラスは、タイムゾーンのない時間帯のない日付のみの値を表します。任意のLocalDate
については
LocalDate ld = LocalDate.of(2018 , Month.FEBRUARY , 17) ;
、あなたは同じ月内の曜日の順序発生に調整することができます(例:第三木曜日、第二火曜日、など)。曜日をDayOfWeek
列挙型で指定します。
調整するには、TemporalAdjusters
クラスにあるTemporalAdjuster
の実装を使用します。
TemporalAdjuster thirdThursdayAdjuster = TemporalAdjusters.dayOfWeekInMonth(3 , DayOfWeek.THURSDAY) ; // Third-Thursday.
別LocalDate
のオブジェクトを生成する、任意のLocalDate
にその調整を適用します。それのうち無限イテレータのような
LocalDate thirdThursday = ld.with(thirdThursdayAdjuster) ;
何かが(.next()単純に別のLocalDate
から移動
に一致する次の日付を返します。あなたはLocalDate::addMonths
を呼び出すことができます。または一度に1か月を扱う場合は、YearMonth
クラスを使用してください。
TemporalAdjuster thirdThursdayAdjuster = TemporalAdjusters.dayOfWeekInMonth(3 , DayOfWeek.THURSDAY) ; // Third-Thursday.
List<LocalDate> dozenThirdThursdays = new ArrayList<>(12) ;
YearMonth start = YearMonth.of(2018 , Month.MARCH) ;
for(int i = 1 ; i <= 12 ; i ++) {
YearMonth ym = start.plusMonths(i) ;
LocalDate firstOfMonth = ym.atDay(1) ;
LocalDate thirdThursday = firstOfMonth.with(thirdThursdayAdjuster) ;
dozenThirdThursdays.add(thirdThursday) ;
}
java.timeについて
java.timeフレームワークは、Java 8に組み込まれており、後にされています。これらのクラスは、java.util.Date
、Calendar
、& SimpleDateFormat
などの面倒な古いlegacy日時クラスに取って代わります。
にあるJoda-Timeプロジェクトは、java.timeクラスへの移行を推奨しています。
詳しくはOracle Tutorialをご覧ください。そして、多くの例と説明のためにStack Overflowを検索してください。仕様はJSR 310です。
ここで、java.timeクラスを取得するには?
ThreeTen-Extraプロジェクトでは、追加のクラスでjava.timeを拡張します。このプロジェクトは、将来のjava.timeへの追加の可能性を証明する土台です。ここでは、Interval
、YearWeek
、YearQuarter
、moreなどの便利なクラスがあります。
あなたは私の午後を揺るがしました - ありがとうございました! –
重要ではありませんが、これはremove()をサポートする2番目のイテレータであると言いたいのですが、通常はサポートするのが面倒です。 – Esko