首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何根据日期而不是时间比较两个Instant

如何根据日期而不是时间比较两个Instant
EN

Stack Overflow用户
提问于 2015-01-07 14:33:08
回答 3查看 22.8K关注 0票数 10

我希望有一个简单的解决方案来比较Java中的两个Instant对象。比较规则应基于日期而不是时间。

public boolean isAfterBasedOnDate(Instant instant, Instant compareTo) {
//TODO
}

例如,

返回即时消息:2013-01-03T00:00:00Z

  • instant (比较对象):2013-01-03T15:00:00Z

  • isAfterBasedOnDate

  • false

返回即时消息:2013-01-03T15:00:00Z

  • instant (比较对象):2013-01-30T00:00:00Z

  • isAfterBasedOnDate

  • true

有什么简单的方法可以做到吗?

EN

回答 3

Stack Overflow用户

发布于 2015-01-07 14:54:34

Instant对象上使用truncatedTo-method仅获取天数。

public boolean isAfterBasedOnDate(Instant instant, Instant compareTo) {
    return instant.truncatedTo(ChronoUnit.DAYS)
                  .isAfter(compareTo.truncatedTo(ChronoUnit.DAYS));
}

@Test
public void test() {
    Assert.assertFalse(isAfterBasedOnDate(
            Instant.parse("2013-01-03T00:00:00Z"),
            Instant.parse("2013-01-03T15:00:00Z")));

    Assert.assertFalse(isAfterBasedOnDate(
            Instant.parse("2013-01-03T15:00:00Z"),
            Instant.parse("2013-01-03T00:00:00Z")));

    Assert.assertFalse(isAfterBasedOnDate(
            Instant.parse("2013-01-02T15:00:00Z"),
            Instant.parse("2013-01-03T00:00:00Z")));

    Assert.assertTrue(isAfterBasedOnDate(
            Instant.parse("2013-01-04T15:00:00Z"),
            Instant.parse("2013-01-03T00:00:00Z")));
}
票数 5
EN

Stack Overflow用户

发布于 2018-08-14 06:02:08

虽然公认的答案是正确的,但阅读此问题的用户应该重新考虑是否应该在这种情况下使用即时。LocalDate是存储和比较与时间无关的日期的合适方法。截断的即时可以工作,但它本质上仍然意味着一个时区,这是不相关的。

票数 1
EN

Stack Overflow用户

发布于 2019-11-26 02:24:25

以一种简单的方式,您可以将其与java中的Instant进行比较,精度为2秒:

   public boolean isAfterBasedOnDate(Instant instant, Instant compareTo) {
       return instant.getEpochSecond() - compareTo.getEpochSecond() > 0;
   }

另外,如果需要纳米精度,可以简单地使用这样的方法:

public boolean isAfterBasedOnDate(Instant instant, Instant compareTo) {
        long secondDiff = instant.getEpochSecond() - compareTo.getEpochSecond();
        return secondDiff > 0
                || (secondDiff == 0 && instant.getNano() - compareTo.getNano() > 0);
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27813691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档