簡體   English   中英

Java 日期/日歷 object 字符串,比較

[英]Java Date/Calendar object strings, compare

我的日期對象格式如下

2011/06/13 17:52:20

並作為字符串返回。 我如何將其與以相同方式格式化的另一個日期進行比較。 對於我正在形成的條件語句,我想確定哪個大於、小於或等於。

當可能已經有這樣做的框架時,無需重新發明輪子(或制造幾個案例)

謝謝!

  • 使用SimpleDateFormat解析
  • 使用獲取的Date對象的compareTo(..)

例如:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date1 = sdf.parse(string1);
Date date2 = sdf.parse(string2);

int result = date1.compareTo(date2);

結果是(來自java.util.Date文檔):

如果參數 Date 等於此 Date,則值為 0; 如果此 Date 在 Date 參數之前,則值小於 0; 如果此 Date 在 Date 參數之后,則值大於 0。

在我看來,您的日期格式是 yyyy/mm/dd hh:mm:ss。 如果是這種情況,您可以進行字符串比較,它將為您提供准確的更大/更少/等於。 該字符串被編碼為最重要到最不重要。

我的同事上周向我指出,yyyy-MM-dd HH:mm:ss 字符串與基礎日期的順序完全兼容(只要字段都是零填充的)。 因此,如果它們更容易獲得,您可以只對 String 值進行 compareTo。

tl;博士

LocalDateTime.parse( "2011/06/13 17:52:20".replace( " " , "T" ) )
             .isBefore( LocalDateTime.now() )

真的

細節

其他答案是正確的,因為您可以(a)按字母順序比較那些特定的字符串,或者(b)在解析為日期時間對象后按時間順序進行比較。

請注意,日期時間格式沒有“格式”。 它們包含日期時間信息。 他們可以生成特定格式的字符串,但日期時間 object 和字符串是分開且不同的。

其他答案使用現在遺留的麻煩的舊日期時間類,被 java.time 類取代。

您的輸入缺少有關從 UTC 偏移和時區的信息。 所以我們必須將它們解析為LocalDateTime對象。 要進行解析,請將中間的空格替換為T以符合 ISO 8601 標准,用於格式化表示日期時間值的字符串。

String input = "2011/06/13 17:52:20".replace( " " , "T" );
LocalDateTime ldtThen = LocalDateTime.parse( input ) ;
LocalDateTime ldtNow = LocalDateTime.now( ZoneId.of( "America/Montreal" ) ) ;

相比。

boolean ldtThenIsBefore = ldtThen.isBefore( ldtNow );
boolean ldtThenIsAfter = ldtThen.isAfter( ldtNow );
boolean ldtThenIsEqual = ldtThen.isEqual( ldtNow );

關於java.time

java.time框架內置於 Java 8 及更高版本中。 這些類取代了麻煩的日期時間類,例如java.util.DateCalendarSimpleDateFormat

現在處於維護模式Joda-Time項目建議遷移到java.time類。

要了解更多信息,請參閱Oracle 教程 並在 Stack Overflow 上搜索許多示例和解釋。 規范是JSR 310

從哪里獲得 java.time 課程?

ThreeTen-Extra項目通過附加類擴展了 java.time。 該項目是未來可能添加到 java.time 的試驗場。 您可以在這里找到一些有用的類,例如IntervalYearWeekYearQuarter等等

盡管 SimpleDateFormat 允許將文本解析為日期 object,但最好將日期存儲為日期 object 並在顯示時對其進行解析。

創建/存儲 Date 對象並使用它們內置的 compareTo() 方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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