2015-05-29 62 views
1

我已經建立了一個自定義的數據網格,我已經添加了一些過濾器比較日期。 我有一個過濾器是日期過濾器,用於顯示日期的單元格。 我的問題是,電池可能顯示取決於格式

Displayed date value : 21/01/2014 , Actual date object value : 21-01-2014 16:32:0000 

當然,用戶不知道的小時部分,所以當他/她提供的同一天,一個月的過濾器值,並預計今年看匹配元素。這當然不會發生,因爲比較器會比較具有不同小時值的日期對象。

我要問的是,是有根據的顯示格式來比較兩個Date對象的優選方式?我可以實現這個邏輯,我只是​​好奇一些已經存在的實現。

更新

我有兩個日期對象:

  1. 21-01-2014 16:32:0000
  2. 21-01-2014 00:00:0000

和顯示格式:「DD/MM/YYYY」

有取決於格式這兩個日期相組合的優選方式? 這意味着只比較包含在該格式的日期的各個部分。 在上述情況下,僅比較日(日),月(MM),年(日)。

我在重複我可以實現一些簡單的自己,我只是好奇,如果其他人以前遇到過這種情況,並已找到一個通用的解決方案。

+2

我無法理解您的要求 – SpringLearner

+0

我已更新我的問題 – alkis

回答

1

如果您正在尋找在客戶端的解決方案(其中的Java代碼是由GWT編譯器編譯爲JavaScript),Krzysztof's解決方案將無法工作。 GWT does not support Calendar and related classes在客戶端。 SimpleDateFormat不支持任何 - DateTimeFormat has to be used instead

但是有一個可用一個有用的工具類在GWT:CalendarUtil。它有一個isSameDate(java.util.Date date0, java.util.Date date1)方法,不正是你想要什麼:

檢查兩個日期代表同一年的同一天,即使他們有不同的時間。

順便說一句,它也有一個resetTime(java.util.Date date)方法,這可能是在你的使用情況有用:

重置日期有沒有時間調節劑。

+1

我正在改變對此的接受答案。所有以前的答案都是我所知道的(當然,這並不會降低這些答案的價值,只是我想要一些不常見的東西)。 – alkis

+0

問題是關於java,而不是GWT。當然,你可以爲一切使用圖書館,但僅僅因爲它有一個微不足道的方法而使用某個圖書館是可笑的。 –

+0

爲什麼downvote?你確定你瞭解Java和GWT之間的關係嗎?如果你不這樣做,請不要盲目(無論你是誰)。我推斷出這個問題是基於OP使用的標籤的GWT。加上「自定義數據網格」部分。我同意在問題中應該更清楚地說明,但看​​起來這是正確的結論,因爲OP很樂意使用與GWT捆綁在一起的類。當然,我同意一個人不應該爲一個簡單的效用方法包含一個龐大的圖書館,並且OP也許同意,但他已經在使用GWT。 –

1

前相比修改date以這種方式:

GregorianCalendar gc = new GregorianCalendar(); 
    gc.setTime(date); 
    gc.set(GregorianCalendar.HOUR_OF_DAY, 0); 
    gc.set(GregorianCalendar.SECOND, 0); 
    gc.set(GregorianCalendar.MINUTE, 0); 
    gc.set(GregorianCalendar.MILLISECOND, 0); 

    date = gc.getTime(); 

將它修剪到當天的值,這樣你就可以,如果它們是同一比較兩個日期,但既然你已經削減了他們對於日值,無論以前的小時,分​​鍾,秒和毫秒值如何,這些日期都會在比較時返回true。

或者,你可以這樣做:

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); 

    Date date1 = ...; 

    Date date2 = ...; 

    if (sdf.format(date1).equals(sdf.format(date2))) { 
     // dates are equal in the day value 
    } 
+0

是的,我也在想,但我好奇是否有更好的存在。 Upvoted。 – alkis

1

對於Java中的任何日期/時間處理,使用LocalDate。閱讀this後爲什麼使用LocalDate優於其他較舊的選項是有利的。

說了這麼多,所有你需要做的比較你Date(S)在您要求的格式(DD/MM/YYYY)是這樣的:

date1date2是有Date對象的輸入日期。

LocalDate lD1 = new LocalDate(date1); 
LocalDate lD2 = new LocalDate(date2); 

String comparisonFormat = "dd/MM/yyyy"; 

boolean result = lD1.toString(comparisonFormat).equals(lD2.toString(comparisonFormat)); 

如果這是你的事情,你可以這樣做,但我認爲這樣更具可讀性。