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

Xia*_*ong 6 java

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

public boolean isAfterBasedOnDate(Instant instant, Instant compareTo) {
//TODO
}
Run Code Online (Sandbox Code Playgroud)

例如,

  • 时间:2013-01-03T00:00:00Z
  • 即时(比较):2013-01-03T15:00:00Z
  • isAfterBasedOnDate返回false

  • 时间:2013-01-03T15:00:00Z
  • 即时(比较):2013-01-30T00:00:00Z
  • isAfterBasedOnDate返回true

有没有简单的方法呢?

Dee*_*ala 15

截断Instant天数,然后比较截断的值.

  public static void main(String[] args) {
    Instant now = Instant.now();
    System.out.println(now);
    Instant truncated = now.truncatedTo(ChronoUnit.DAYS);
    System.out.println(truncated);
  }
Run Code Online (Sandbox Code Playgroud)
2015-01-07T06:43:30.679Z
2015-01-07T00:00:00Z
Run Code Online (Sandbox Code Playgroud)


was*_*ren 5

在对象上使用truncatedTo-方法Instant只能获取天数。

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")));
}
Run Code Online (Sandbox Code Playgroud)