2012-03-07 209 views
2

從外部服務中,我得到Date+Time字段的對象爲String的格式爲2012-03-07 12:12:23.547,我需要比較這些字段以獲取對象的正確順序。我很清楚,我可以通過例如創建Date對象。 SimpleDateFormat(「yyyy-MM-dd HH:mm:ss.SSS」)並比較兩個Date的實現,但我的問題是如果我可以依靠正確的排序順序,如果我將它們比作字符串,如String.compareTo(String)?一些輕度測試給我的印象是,它的工作原理,但我想知道是否有人知道任何情況下,它不會給我正確的結果?還有,比較String的Vs解析到日期進行比較是否有任何性能考慮因素,優點或缺點?Java:可以將日期作爲字符串進行比較

+0

提供您的日期格式始終保持在年份分裂秒數應該是好的,實際上可能比轉換爲日期然後比較更有效。如果您的日期格式發生變化,您可能會遇到麻煩。 – mcfinnigan 2012-03-07 11:27:24

回答

5

假設小時格式爲24小時格式,那麼是的,這是一種可排序的日期/時間格式 - 其衆所周知的好處之一是您可以在沒有實際解析的情況下進行排序。

一個缺點是:如果你收到了不好的數據,你就不會發現它 - 你會把它整齊地分類到「正確的」地方,而忽略了你被給予(說)2月30日的事實。

如果您以後需要將值作爲日期/時間,那麼我會先解析它然後進行比較。但是如果你只需要需要這樣的排序,字符串比較可能比解析一切都快。值得進行基準測試,當然......特別是在同一天比較兩個字符串將需要幾個字符 - 值得檢查,而如果你已經解析了它,那麼可能只是比較long的值。

+0

感謝Jon +提供答案的其他人。 – hgus1294 2012-03-07 11:48:18

2

不,更好的方法是解析日期對象中的字符串,然後與其他日期對象進行比較。

2

我不擔心性能,除非你有理由認爲這個代碼會成爲一個瓶頸(在循環內被稱爲很多次),甚至在那之前我會等到你可以做一些具體的性能測試。

將它們作爲日期進行比較將使您的代碼更加清晰,並且意味着您將來可以更輕鬆地更改日期格式(對於不按字符串排序的內容)。

2

它的工作原理提供

  • 您從最顯著責令領域最顯著。
  • 您使用數字字段(不是1月/ 2月),它們是相同的寬度。例如2:15在12:15之後但是02:15之前如預期那樣。注意:在9999之後和0001之前的這段時間內,這將不起作用。
  • 您接受可能無法檢測到無效日期。
1

我認爲日期是比較或可以比較通過更快的毫秒(長)。這可能是更安全的方式,你不需要考慮字符串比較不適合的情況。

相關問題