gpt4 book ai didi

jodatime - Joda 两个日期之间的时间间隔,包括时区

转载 作者:行者123 更新时间:2023-12-04 01:30:41 26 4
gpt4 key购买 nike

我使用 JodaTime 库进行时间操作。
我有两个日期:
日期一:

DateTime time_server = new DateTime(server_time_milisecs).
withZone(DateTimeZone.forID("Europe/Zurich")); //+0100

显示: 2013-01-27 13:44:42
日期二:
DateTime time_local = new DateTime(DateTime.now()).
withZone(DateTimeZone.getDefault()); //Have "Europe/Moscow" timezone +0400

显示: 2013-01-27 16:41:47
我需要找到真实的时间间隔,包括时区
Interval interval = new Interval(time_local, time_server);
Long.toString(interval.toDurationMillis()));

结果:174040 毫秒 - 不正确
int secs = Seconds.secondsBetween(time_local,time_server).getSeconds();

结果:174 秒 不正确
Period period = new Period(time_local, time_server);
Integer.toString(period.getSeconds()) //**Wrong too**

结果必须是:10974 秒

最佳答案

如果您需要进行涉及不同时区的时间计算,您应该花一些时间(无双关语)来掌握 Jodatime 概念 ( eg )。

例如,考虑以下代码

DateTime nowHere = DateTime.now();
DateTime nowZur = nowHere.withZone(DateTimeZone.forID("Europe/Zurich"));
System.out.println("now Here: " + nowHere );
System.out.println("now Zurich: " + nowZur );

这个输出(对我来说,从苏黎世偏移 4 小时):
now Here:   2013-01-27T10:19:24.460-03:00
now Zurich: 2013-01-27T14:19:24.460+01:00

暂停并尝试猜测以下几行的输出:
Interval interv = new Interval(nowHere, nowZur);
System.out.println("Interval: " + interv.toDurationMillis());

以上打印 0 (零)。正如它应该。

因为 nowHerenowZur代表 同一时刻 (在物理线路时间),代表在两个不同的国家。它们的区别仅在于它们的表示方式,但在物理上它们是相同的时间点(例如 2.54 cm1 in 是相同的长度,以两种不同的形式表示)。

同样, 2013-01-27T10:19:24.460-03:002013-01-27T14:19:24.460+01:00是同一时刻,我运行该代码的时刻,仅根据不同国家的惯例表示;一个火星人可以用他自己的火星历来代表同一个瞬间,而且它仍然是同一个瞬间。

由于这些 DateTime 代表相同的时间点,因此它们之间的物理间隔(持续时间)必须为零。现在,如果您想获得两者之间的“民用时差”,那是完全不同的事情。 LocalDateTimePeriod (与 DateTimeDuration 完全不同)将是正确的概念。例如:
Period per=new Period(nowHere.toLocalDateTime(),nowZur.toLocalDateTime());
System.out.println(per.toStandardSeconds().getSeconds());

这为我打印了 14400(4 个“标准” - 不是物理时间)

关于jodatime - Joda 两个日期之间的时间间隔,包括时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14547599/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com