为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

RISEBY 2021-08-19 21:15:08
我有两个字符串格式的日期: sayString date1 = 2018-08-29和ISO-OFFSET_DATE_TIME格式为String date2 = 2018-08-30T00:00:00+10:00。比较 date1 和 date2 是否相等的最佳方法是什么?我不关心时间,只关心日、年和月。我应该将它们转换为即时和比较吗?
查看完整描述

3 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

LocalDate

.parse( "2018-08-29" ) 

.isEqual(

    OffsetDateTime

    .parse( "2018-08-30T00:00:00+10:00" )

    .toLocalDate()

)

错误的


时间

在java.time 中解析每个输入的适当类型。


LocalDate ld = LocalDate.parse( "2018-08-29" ) ;

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

通过LocalDate从 中提取 a 进行比较OffsetDateTime。


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。


真的


查看完整回答
反对 回复 2021-08-19
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

最快的方法是;


String date1 = "2018-08-29";

String date2 = "2018-08-30T00:00:00+10:00";

boolean isEqual = date2.startsWith(date1);


查看完整回答
反对 回复 2021-08-19
?
慕仙森

TA贡献1827条经验 获得超7个赞

如果这是您唯一想知道的关于这两个字符串的信息:


    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");

    }

使用您的字符串示例从问题中输出:


他们是不同的日期


当他的回答出现时,我正在编写类似于Basil Bourque 的代码。我更喜欢通过正确的日期时间对象来处理日期和时间,这正是他正在做的。通过解析date2为 ,OffsetDateTime您可以保留所有信息,并且LocalDate可以轻松转换为进行比较。对于大多数目的,我推荐这种方式。


只有当你确定你永远不需要一天中的时间时,你才能走捷径。你当然可以用王俊杰的快捷方式。不过,我更喜欢上面自己的代码,原因有两个:我清楚地告诉读者这些字符串是日期和时间,并正确处理它们。因此它还提供了字符串格式的验证。如果某天不小心得到了一个完全不同的字符串,您将通过DateTimeParseException.


查看完整回答
反对 回复 2021-08-19
  • 3 回答
  • 0 关注
  • 297 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信