首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确地使用ThreeTenABP根据UTC获取两个日期之间的时间(毫秒)

如何正确地使用ThreeTenABP根据UTC获取两个日期之间的时间(毫秒)
EN

Stack Overflow用户
提问于 2018-08-14 03:05:43
回答 1查看 2.2K关注 0票数 2

我正在使用我刚刚发现的库,它应该比Joda在android上的时间要轻,我说了什么,让我们使用它。但是现在我很难在网上找到关于如何使用它的好例子,除了这两种方法之外:

代码语言:javascript
复制
// ZonedDateTime contains timezone information at the end
// For example, 2011-12-03T10:15:30+01:00[Europe/Paris]
public static ZonedDateTime getDate(String dateString) {
    return ZonedDateTime.parse(dateString).withZoneSameInstant(ZoneId.of("UTC"));
}

public static String formatDate(String format, String dateString) {
    return DateTimeFormatter.ofPattern(format).format(getDate(dateString));
}

那么,如何才能在这个库中得到两个约会之间的区别呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-15 16:52:00

有几个选项取决于您从所获得的差异中需要什么。

这是最容易找到的差异测量在某个时间单位。使用ChronoUnit.between。例如:

代码语言:javascript
复制
    ZonedDateTime zdt1 = getDate("2011-12-03T10:15:30+01:00[Europe/Paris]");
    ZonedDateTime zdt2 = getDate("2017-11-23T23:43:45-05:00[America/New_York]");

    long diffYears = ChronoUnit.YEARS.between(zdt1, zdt2);
    System.out.println("Difference is " + diffYears + " years");

    long diffMilliseconds = ChronoUnit.MILLIS.between(zdt1, zdt2);
    System.out.println("Difference is " + diffMilliseconds + " ms");

这些指纹:

差是5年,差是188594895000 ms。

我正在使用您的getDate方法,所以所需的格式是ZonedDateTime (从ISO8601修改)的格式,例如2011-12-03T10:15:30+01:00[Europe/Paris]。秒和秒的分数是可选的,方括号中的时区ID也是可选的。

顺便说一句,在找到差异之前,您不需要转换到UTC。即使省略了转换,也会得到相同的结果。

你也可能得到不同的年份,几个月和几天。Period类可以给出这样的结果,但是它不能处理一天中的时间,所以首先要转换为LocalDate

代码语言:javascript
复制
    Period diff = Period.between(zdt1.toLocalDate(), zdt2.toLocalDate());
    System.out.println("Difference is " + diff);

差异是P5Y11M21D

产出指的是5年、11个月、21天的期间。语法一开始可能有点奇怪,但很简单。它是由ISO 8601标准定义的。在这种情况下,时区很重要,因为在所有时区中,时区从来都不是相同的日期。

为了获得以小时、分钟和秒为单位的差异,使用Duration类(我引入了一个新的时间,因为使用Duration将近6年将太不典型(尽管可能))。

代码语言:javascript
复制
    ZonedDateTime zdt3 = getDate("2017-11-24T18:45:00+01:00[Europe/Copenhagen]");
    Duration diff = Duration.between(zdt2, zdt3);
    System.out.println("Difference is " + diff);

差异是PT13H1M15S

13小时1分15秒。您在这里已经从2011-12-03T10:15:30+01:00[Europe/Paris]中知道的2011-12-03T10:15:30+01:00[Europe/Paris]也将日期部分与时间部分分隔开来,因此您知道在本例中1M意味着1分钟,而不是1个月。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51833142

复制
相关文章

相似问题

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