次のような 2 つの日付があるとします。
DateTimeFormatter formatter = DateTimeFormat.forPattern("dd-MMM-yyyy HH:mm:ss").withZone(DateTimeZone.forID("Asia/Kolkata"));
DateTime firstDate = formatter.parseDateTime("16-Feb-2012 12:03:45");
DateTime secondDate = formatter.parseDateTime("17-Feb-2013 12:03:45");
firstDate
これら 2 つの日付を比較して、 が より早いか、遅いか、等しいかを確認したいと思いsecondDate
ます。
以下を試すことができました。
System.out.println("firstDate = "+firstDate+"\nsecondDate = "+secondDate+"\ncomparison = "+firstDate.isBefore(secondDate));
System.out.println("firstDate = "+firstDate+"\nsecondDate = "+secondDate+"\ncomparison = "+firstDate.isAfter(secondDate));
System.out.println("firstDate = "+firstDate+"\nsecondDate = "+secondDate+"\ncomparison = "+firstDate.equals(secondDate));
このコードによって生成されるものは、まさに私が望むものです。
次の出力が生成されます。
firstDate = 2012-02-16T12:03:45.000+05:30
secondDate = 2013-02-17T12:03:45.000+05:30
comparison = true
firstDate = 2012-02-16T12:03:45.000+05:30
secondDate = 2013-02-17T12:03:45.000+05:30
comparison = false
firstDate = 2012-02-16T12:03:45.000+05:30
secondDate = 2013-02-17T12:03:45.000+05:30
comparison = false
これらの日付の秒とミリ秒の部分は無視する必要があります。withSecondOfMinute(0)
次のようなandwithMillis(0)
メソッドを使用しようとしました。
DateTimeFormatter formatter = DateTimeFormat.forPattern("dd-MMM-yyyy HH:mm:ss").withZone(DateTimeZone.forID("Asia/Kolkata"));
DateTime firstDate = formatter.parseDateTime("16-Feb-2012 12:03:45").withSecondOfMinute(0).withMillis(0);
DateTime secondDate = formatter.parseDateTime("17-Feb-2013 12:03:45").withSecondOfMinute(0).withMillis(0);
しかし、次の出力が得られました。
firstDate = 1970-01-01T05:30:00.000+05:30
secondDate = 1970-01-01T05:30:00.000+05:30
comparison = false
firstDate = 1970-01-01T05:30:00.000+05:30
secondDate = 1970-01-01T05:30:00.000+05:30
comparison = false
firstDate = 1970-01-01T05:30:00.000+05:30
secondDate = 1970-01-01T05:30:00.000+05:30
comparison = true
メソッドのドキュメントにwithSecondOfMinute()
説明があります。
分フィールドの秒を更新して、この日時のコピーを返します。DateTime は不変であるため、set メソッドはありません。代わりに、このメソッドは、分の秒の値が変更された新しいインスタンスを返します。
そして、メソッドのドキュメントはwithMillis()
言います。
この日時のコピーを異なるミリ秒で返します。返されるオブジェクトは、新しいインスタンスまたは this のいずれかになります。ミリ秒のみが変更され、年表とタイムゾーンは保持されます。
DateTimeComparator.getDateOnlyInstance()
時間部分を完全に無視して日付を比較することは、次のように大まかに使用して簡単に行うことができます。
if(DateTimeComparator.getDateOnlyInstance().compare(firstDate, secondDate)==0){}
if(DateTimeComparator.getDateOnlyInstance().compare(firstDate, secondDate)<0){}
if(DateTimeComparator.getDateOnlyInstance().compare(firstDate, secondDate)>0){}
DateTime
特定の瞬間(この場合は秒とミリ秒)を無視して2つの日付を比較する方法は?