簡體   English   中英

Java日期比較:不同格式的日期

[英]Java Date comparison: Dates in different formats

我有兩個以String格式表示的日期:比如說String date1 = 2018-08-29 ,以ISO-OFFSET_DATE_TIME格式表示為String date2 = 2018-08-30T00:00:00+10:00 比較date1和date2是否相等的最佳方法是什么? 我不關心時間,只關心日,年和月。 我應該將它們轉換為即時並進行比較嗎?

最快的方法是

String date1 = "2018-08-29";
String date2 = "2018-08-30T00:00:00+10:00";
boolean isEqual = date2.startsWith(date1);

tl; dr

LocalDate
.parse( "2018-08-29" ) 
.isEqual(
    OffsetDateTime
    .parse( "2018-08-30T00:00:00+10:00" )
    .toLocalDate()
)

java.time

java.time中的適當類型期間解析每個輸入。

LocalDate ld = LocalDate.parse( "2018-08-29" ) ;
OffsetDateTime odt = OffsetDateTime.parse( "2018-08-30T00:00:00+10:00" ) ;

通過從OffsetDateTime提取LocalDate進行比較。

Boolean sameDate = ld.isEqual( odt.toLocalDate() ) ;

或者,您可能希望將OffsetDateTime從UTC之前的十個小時的偏移量調整為另一個偏移量或時區。 例如,讓我們在提取日期進行比較之前將其調整回UTC。

LocalDate
.parse( "2018-08-29" ) 
.isEqual(
    OffsetDateTime
    .parse( "2018-08-30T00:00:00+10:00" )
    .withOffsetSameInstant( ZoneOffset.UTC )
    .toLocalDate()
)

這會將我們的結果從上面的代碼中看到的false更改為true

真正

如果這是您唯一想了解的兩個字符串,則:

    LocalDate ld1 = LocalDate.parse(date1);
    LocalDate ld2 = LocalDate.parse(date2, DateTimeFormatter.ISO_OFFSET_DATE_TIME);
    if (ld1.isEqual(ld2)) {
        System.out.println("They are the same date");
    } else {
        System.out.println("They are different dates");
    }

使用您的字符串示例輸出frmo問題:

他們是不同的日期

當他的答案出現時我只是在寫類似於Basil Bourque的代碼。 我更喜歡通過正確的日期時間對象來處理日期和時間,這正是他在做什么。 通過將date2解析為OffsetDateTime您可以保留所有信息,並且轉換為LocalDate以進行比較也很容易。 對於大多數目的,我建議采用這種方式。

僅當您確定自己永遠不需要一天中的時間時,才可以使用快捷方式。 您當然可以使用JunJie Wang的快速方法 不過,我更喜歡上面的代碼,這有兩個原因:我清楚地告訴讀者,字符串是日期和時間,因此可以正確地處理它們。 因此,它還提供了字符串格式的驗證。 如果某天不經意間獲得了完全不同的字符串,則會通過DateTimeParseException通知您。

暫無
暫無

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

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