簡體   English   中英

使用Joda時間比較兩個日期

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM