[英]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。
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 8 及更高版本中。 這些類取代了麻煩的舊日期時間類,例如java.util.Date
、 Calendar
和SimpleDateFormat
。
現在處於維護模式的Joda-Time項目建議遷移到java.time類。
要了解更多信息,請參閱Oracle 教程。 並在 Stack Overflow 上搜索許多示例和解釋。 規范是JSR 310 。
從哪里獲得 java.time 課程?
ThreeTen-Extra項目通過附加類擴展了 java.time。 該項目是未來可能添加到 java.time 的試驗場。 您可以在這里找到一些有用的類,例如Interval
、 YearWeek
、 YearQuarter
等等。
盡管 SimpleDateFormat 允許將文本解析為日期 object,但最好將日期存儲為日期 object 並在顯示時對其進行解析。
創建/存儲 Date 對象並使用它們內置的 compareTo() 方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.