簡體   English   中英

如何在 java 中使用日歷比較沒有時間的日期?

[英]how to compare date without time using calendar in java?

我只想比較兩個日期類型的日期而不是時間。

日期 1 = 2022.10.10 16:30:40 日期 2 = 2022.10.10 13:30:40

這些日期是相同的日期,所以我想返回 true。

下面是我的代碼。 有干凈的代碼嗎?

public Boolean a0160(HashMap<String, Object> params){
        Date accessRecord;
        Date now = new Date();
        accessRecord = userMapper.a0170(params);
        Calendar calAccessRecord = Calendar.getInstance();
        Calendar calOneHourBefore = Calendar.getInstance();
        calAccessRecord.setTime(accessRecord);
        calOneHourBefore.setTime(now);
        calOneHourBefore.add(Calendar.HOUR, -1);

        int calOneHourBeforeYear = calOneHourBefore.get(Calendar.YEAR);
        int calOneHourBeforeMonth = calOneHourBefore.get(Calendar.MONTH);
        int calOneHourBeforeDate = calOneHourBefore.get(Calendar.DATE);

        int calAccessRecordYear = calAccessRecord.get(Calendar.YEAR);
        int calAccessRecordMonth = calAccessRecord.get(Calendar.MONTH);
        int calAccessRecordDate = calAccessRecord.get(Calendar.DATE);

        if(calOneHourBeforeYear == calAccessRecordYear && calAccessRecordMonth == calOneHourBeforeMonth && calAccessRecordDate == calOneHourBeforeDate){
            return true;
        } else {
            return false;
        }
    }

tl;博士

myJavaUtilDate
.toInstant() 
.atZone( 
    ZoneId.of( "Pacific/Auckland" )
)
.toLocalDate()
.isEqual(
    ZonedDateTime
    .now( ZoneId.of( "Pacific/Auckland" ) )
    .minusHours( 1 )
    .toLocalDate()
)

java.時間

您正在使用多年前被 JSR 310 中定義的現代java.time類所取代的糟糕日期時間類。

顯然,您收到了一個java.util.Date object。要做的第一件事就是將有缺陷的舊版轉換為現代替代品java.time.Instant 使用添加到舊類的新轉換方法。

Instant instant = myJavaUtilDate.toInstant() ;

傳統類和現代類都代表一個時刻,與 UTC 的偏移量為零小時-分鍾-秒。

了解在任何給定時刻,全球各地的日期因時區而異。 因此確定日期需要時區的上下文。

ZoneId z = ZoneId.of( "Asia/Tokyo" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;

提取日期部分。

LocalDate ld = zdt.toLocalDate() ;

顯然您想將其與一小時前的當前日期進行比較。

LocalDate dateAnHourAgo = ZonedDateTime.now( z ).minusHours( 1 ).toLocalDate() ;

isEqualisBeforeisAfter方法進行比較。

它們不是約會對象; 它們是字符串:

return date2.startsWith(date1.substring(0, 10));

暫無
暫無

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

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