繁体   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