[英]Comparing two dates using Joda time
我想比較兩個日期,但是我遇到了麻煩。 1日期是從java.util.date
對象創建的,另一個是手動制作的。 以下代碼是一個示例:
Date ds = new Date();
DateTime d = new DateTime(ds);
DateTime e = new DateTime(2012,12,07, 0, 0);
System.out.println(d.isEqual(e));
然而,測試結果是false
。 我猜這是因為時間。 如何檢查這兩個日期是否相等(我的意思是年,月,日相同)?
System.out.println(d.toDateMidnight().isEqual(e.toDateMidnight()));
要么
System.out.println(d.withTimeAtStartOfDay().isEqual(e.withTimeAtStartOfDay()));
你應該使用toLocalDate() :
date1.toLocalDate().isEqual(date2.toLocalDate())
這將擺脫DateTime的Time部分。
還有另一種方法,但它沒有考慮兩個日期具有不同時區的情況,因此它不太可靠:
date1.withTimeAtStartOfDay().isEqual(date2.withTimeAtStartOfDay())
return DateTimeComparator.getDateOnlyInstance().compare(first, second);
如果要忽略時間組件(即只想比較日期),可以使用DateMidnight類而不是Date Time。 所以你的例子看起來像這樣:
Date ds = new Date();
DateMidnight d = new DateMidnight(ds);
DateMidnight e = new DateMidnight(2012, 12, 7);
System.out.println(d.isEqual(e));
但要注意,它只會在今天打印“真實”:)
另請注意,默認情況下,JDK Date和所有Joda-Time即時類(包括DateTime和DateMidnight)都是使用默認時區構造的。 因此,如果您在代碼中創建一個要比較的日期,但是從DB中檢索另一個可能以UTC格式存儲日期的日期,則可能會遇到不一致,假設您不在UTC時區。
因為它們是DateTime對象,所以當您比較它們時,它們的時間部分也會被考慮在內。 嘗試將第一個日期的時間部分設置為0,如:
d = d.withTime(0, 0, 0, 0);
我在尋找與今天的比較時偶然發現了這個問題。 以下是將日期與今天進行比較的方法:
date1.toLocalDate().isBeforeNow() // works also with isAfterNow
這是一個適合我的靜態方法。
public static boolean isSameDay(DateTime date1, DateTime date2){
return date1.withTimeAtStartOfDay().isEqual(date2.withTimeAtStartOfDay());
}
DateTimeComparator.getDateOnlyInstance().compare(obj1, obj2);
obj1和obj2可以是String,Long,Date(java.util)...有關詳細信息,請參閱http://www.joda.org/joda-time/apidocs/index.html?org/joda/time/DateTimeComparator html的
編寫自己的方法
public boolean checkEqual(DateTime first,DateTime second){
if(first.<getterforyear> == second.<getterforyear> && first.<getterformonth> == second.<getterformonth> && first.<getterforday> == second.<getterforday>){
return true;
}
return false;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.