如何比较localdatetime与当前日期包括小时在java中

o4hqfura  于 2023-01-11  发布在  Java
关注(0)|答案(1)|浏览(120)

我的本地日期时间(发货),格式类似“2023-01- 11 T01:25:59”
我需要与当前时间进行比较,以满足以下条件
1.如果两者都在同一日期,且发货时间超过当前时间
1.发货日期等于下一个当前日期(在本例中,发货日期= 2023-01-11 ==当前日期+ 1天
我做了这个,但它不工作与小时

LocalDateTime shippingdate= (calling funtion)
System.out.println("shippingdate "+shippingdate);  //2023-01-11T01:25:59 

LocalDateTime currentDateTime = LocalDateTime.now(ZoneId.of("UTC"));
System.out.println("currentTime "+currentDateTime);   //2023-01-10T03:42:52.574994

int diff = shippingdate.compareTo(currentDateTime);

if (diff==1) {
}

if (diff > 1) {
}

LocalDateTime currentDateTime = LocalDateTime.now(ZoneId.of("UTC"));
svmlkihl

svmlkihl1#

LocalDateTime不能表示力矩

一个问题是您对LocalDateTime类的不当使用。该类故意缺少UTC中的时区或办公室上下文。因此该类不能表示某个时刻,即时间线上的某个特定点。但显然您正在尝试跟踪这些时刻。
如果只提供日期和时间,则解析为LocalDateTime

LocalDateTime ldt = LocalDateTime.parse( "2023-01-11T01:25:59" ) ;

OffsetDateTime

但是如果你确定日期和时间是用来表示偏移量为零的时刻,那么就立即转换为OffsetDateTime,同时,告诉你的输入数据的发布者他们未能传达所有三个重要信息(日期、时间、* 和 * 偏移量/区域)。

OffsetDateTime odt = ldt.atOffset( ZoneOffset.UTC ) ;

这里的想法是"说实话"。如果意图是一个日期和时间,就像在UTC中看到的那样,那么我们的代码应该表示一个日期和时间,就像在UTC中看到的那样。
显然,您希望将UTC中的此日期时间与UTC中显示的当前时刻进行比较。

OffsetDateTime now = OffsetDateTime.now( ZoneOffset.UTC ) ;

LocalDate

你最关心的是日期。

LocalDate shippingDate = odt.toLocalDate() ;
LocalDate today = now.toLocalDate() ;
LocalDate tomorrow = today.plusDays( 1 ) ;

if ( shippingDate.isBefore( today ) { … is past }
else if ( shippingDate.isEqual( today ) { … is today }
else if ( shippingDate.isEqual( tomorrow ) { … is tomorrow }
else if ( shippingDate.isAfter( tomorrow ) { … is future }
else { … throw exception because we should never reach this point }

OffsetDateTime#getHour

你的第二个顾虑显然是你想知道今天的目标时间是否与当前时间相同,你在这一点上写得一点也不清楚,但这是我的猜测。
因此,在上面的"等于今天"测试分支中添加一个嵌套测试。

if( odt.getHour() == now.getHour() ) { … same clock hour }

或者你想在以后的一个小时里测试。

if( odt.getHour() > now.getHour() ) { … later, future hour }

相关问题