在 Java 中,如何获得两个日期之间的秒数差异?

新手上路,请多包涵

Java 类库有一个名为 DateTime 的类。 DateTime 有这个方法:

 int daysBetween(DateTime other)

它返回此参数与参数之间的天数。它没有方法

int secondsBetween(DateTime other)

我恰好需要。是否有一个类类似于 DateTime 但有这样的方法?

原文由 snakile 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 480
2 个回答

不熟悉日期时间…

如果您有两个日期,您可以对它们调用 getTime 以获得毫秒数,获取差异并除以 1000。例如

Date d1 = ...;
Date d2 = ...;
long seconds = (d2.getTime()-d1.getTime())/1000;

如果你有日历对象,你可以调用

c.getTimeInMillis()

并做同样的事情

原文由 Scott Stanchfield 发布,翻译遵循 CC BY-SA 3.0 许可协议

我想提供现代答案。当问到这个问题时,其他答案都很好,但时间在流逝。今天我推荐你使用 java.time ,现代 Java 日期和时间 API

     ZonedDateTime aDateTime = ZonedDateTime.of(2017, 12, 8, 19, 25, 48, 991000000, ZoneId.of("Europe/Sarajevo"));
    ZonedDateTime otherDateTime = ZonedDateTime.of(2017, 12, 8, 20, 10, 38, 238000000, ZoneId.of("Europe/Sarajevo"));

    long diff = ChronoUnit.SECONDS.between(aDateTime, otherDateTime);
    System.out.println("Difference: " + diff + " seconds");

这打印:

 Difference: 2689 seconds

ChronoUnit.SECONDS.between() works with two ZonedDateTime objects or two OffsetDateTime s, two LocalDateTime s, etc.

如果你需要的不仅仅是秒,你应该考虑使用 Duration 类:

     Duration dur = Duration.between(aDateTime, otherDateTime);
    System.out.println("Duration: " + dur);
    System.out.println("Difference: " + dur.getSeconds() + " seconds");

这打印:

 Duration: PT44M49.247S
Difference: 2689 seconds

这两行中的前者以 ISO 8601 格式打印持续时间,输出表示持续时间为 44 分 49.247 秒。

为什么是java.time?

其他几个答案中使用的 Date 类现在早已过时。 Joda-Time 也用于一对夫妇(并且可能在问题中)现在处于维护模式,没有计划进行重大增强,开发人员正式建议迁移到 java.time ,也称为 JSR-310。

问:我可以在我的 Java 版本中使用现代 API 吗?

如果至少使用 Java 6 ,则可以。

原文由 Ole V.V. 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题