java.time
ジョダタイムプロジェクトはメンテナンスモードになりました。チームはjava.timeクラスへの移行を勧告しています。 Jodaの時と同様に
LocalDate
、LocalDate
がwithout時間日の時間帯なしの日付のみの値を表します。
LocalDate start = LocalDate.of (2012 , Month.JANUARY , 31);
LocalDate stop = LocalDate.of (2012 , Month.MARCH , 1);
結果を保持する場所を設定します。
long countMonths = 0;
YearMonth
YearMonth
クラスは、よく、年と月を表します。これは、あなたが望むように、数ヶ月ではなく月全体を考慮するコンジットです。
YearMonth ymStart = YearMonth.from (start);
YearMonth ymStop = YearMonth.from (stop);
このYearMonth
クラスは、isAfter
、isBefore
、及びequals
として比較するための方法を有しています。
ChronoUnit
クラスは、Temporal
オブジェクトのペアの間の経過月数を計算できます。 YearMonth
クラスはTemporal
を実装しており、ChronoUnit
で動作します。
if (ymStart.isAfter (ymStop)) {
// Handle error condition. Unexpected input values.
} else if (ymStart.equals (ymStop)) {
countMonths = 0;
} else { // Else different months.
countMonths = ChronoUnit.MONTHS.between (ymStart , ymStop);
}
コンソールにダンプします。
System.out.println ("start: " + start + " | stop: " + stop + " | countMonths: " + countMonths);
開始:2012年1月31日| stop:2012-03-01 | countMonths:上記2
ハーフオープン
結果は結末が排他いる間、初めは包括ある時間のスパンを定義するハーフオープンなアプローチに基づいています。このアプローチは、通常、java.timeクラス全体を含む日時作業で使用されます。
たとえば、昼食時間は正午の最初の瞬間から始まり、午後1時の最初の瞬間まで実行されます。
別の例:1週間は月曜日から始まり、次の月曜日まで実行されますが、それ以降は実行されません。または、この場合、1月から12月までの月のペアと、までですが、、Marchは含まれません。彼らは2ヶ月のスパンをもたらす。
コード全体でHalf-Openアプローチを使用すると、より明確でバグが少なくなると思います。しかし、あなたやあなたのユーザーが他に要求している場合は、上記の結果に1つを追加してください。
java.time
についてjava.timeフレームワークは、Java 8に組み込まれており、後にされています。これらのクラスは、java.util.Date
、.Calendar
、& java.text.SimpleDateFormat
などの面倒な古い日時クラスに取って代わります。
にあるJoda-Timeプロジェクトは、java.timeへの移行を推奨しています。
詳しくはOracle Tutorialをご覧ください。そして、多くの例と説明のためにStack Overflowを検索してください。
java.time機能ThreeTen-BackportでJava 6 & 7に戻って、移植、さらにThreeTenABPでAndroidに適合されているの多く(How to use…を参照)。
ThreeTen-Extraプロジェクトは、追加のクラスでjava.timeを拡張します。このプロジェクトは、将来のjava.timeへの追加の可能性を証明する土台です。ここでは、Interval
、YearWeek
、YearQuarter
などの便利なクラスがあります。