当前位置: 首页 > 知识库问答 >
问题:

如何在YMDHMS中获得两个日期/时间之间的持续时间(ISO 8601)

乜胜泫
2023-03-14

给定2个日期,如何根据ISO 8601工期以年-月-日、时-分-秒格式计算它们之间的差异?

我只发现Java库可以在几天或更短的时间内提供差异。

鉴于月份和年份的天数不规则,我不知道如何计算月份和年份的差异。

平均持续时间。between接近,但它以小时分秒为单位给出结果:

ZonedDateTime event1 = ZonedDateTime.of(2022, 2, 2, 2, 2, 2, 0, ZoneId.of("UTC-7"));
ZonedDateTime event2 = ZonedDateTime.of(2025, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC-7"));
//ZonedDateTime now = ZonedDateTime.now(ZoneId.of("UTC-7"));
Duration duration = Duration.between(event1, event2);
Log.d("Duration ISO-8601: ", duration.toString());


Output:    PT25533H57M58S

也就是25533小时57分58秒

我想看看这样的东西:

__年__月__天9小时57分58秒

共有1个答案

从建明
2023-03-14

我相信我已经解决了:

ZonedDateTime event1 = ZonedDateTime.of(2022, 2, 2, 2, 2, 2, 0, ZoneId.of("UTC-7"));
ZonedDateTime event2 = ZonedDateTime.of(2025, 1, 1, 0, 0, 0, 0, ZoneId.of("UTC-7"));
Duration duration = Duration.between(event1, event2);
Period period = Period.between(event1.toLocalDate(), event2.toLocalDate());
Log.d("Duration ISO-8601: ", period.toString() + duration.toString());

此打印:

P2Y10M30DPT25533H57M58S

也就是2年10个月30天25533小时57分58秒。

当提取单个值时(这是我需要的),使用模数修复了小时的问题:

 String.valueOf(duration.toHours() % 24)

如果分钟和秒有任何问题,%60将修复它。

 类似资料:
  • 我有DateTime字符串2020-04-03 01:29:27和2020-04-03 01:29:37我想得到持续时间在小时。我已经尝试了很多东西,但这却找不到任何帮助

  • 我有两个DateTime对象,它们需要找出它们之间差异的持续时间, 我有以下代码,但不确定如何继续以达到以下预期结果: 示例: 代码:

  • 问题内容: 我有两个DateTime对象,需要找到它们之间的差值的持续时间, 我有以下代码,但不确定如何继续执行以获得预期的结果,如下所示: 例 码 问题答案: 尝试以下

  • 问题内容: 我知道我可以使用momentjs做任何事情,还可以做一些涉及日期的事情。但是令人尴尬的是,我很难去做一件看起来很简单的事情:得到两次之间的差。 例: 我试过的 我不知道那里的“ 10”是什么。我住在巴西,所以如果相关的话,我们是utc-0300。 结果是持续时间正确的内部值: 所以,我想我的问题是:如何将momentjs持续时间转换为时间间隔?我肯定可以用 但我觉得有一些更 优雅 ,我

  • 在Symfony 2中有两个日期时间格式的字段。现在我想得到提交表单后的总小时数 实体php 显示html 这将抛出一个错误 在呈现模板期间引发异常(“DateTime::_construct()希望参数1为字符串,对象为给定的”)在。。。 你如何简单地得到同一天两个小时之间的小时数?

  • 我需要一些解释为什么这个代码不编译: 错误: 类型Duration中的(TemporalAmount)方法不适用于参数(ChronoUnit) 正如本文所述: public static Duration from(TemporalAmount amount)从时间量中获取持续时间的实例。这将根据指定的金额获得持续时间。TemporalAmount表示一个时间量,可以是基于日期的,也可以是基于时间