使用Nodatime如何找到两个ZonedDateTime对象之间的差异

4
使用nodatime,如何计算两个ZonedDateTime对象在其时区内的时间差,例如:我有两个日期分别位于“Europe/Stockholm”时区,在一个本地时间设置为“America/Los_Angeles”的服务器上进行计算。我希望获取这两个日期之间的毫秒数,同时要求考虑“Europe/Stockholm”时区的夏令时,并忽略服务器的本地时间。这是因为如果部署到另一台服务器,服务器的本地时间可能会改变,我不想更新代码。

请查看 @JonSkeet 的博客 http://codeblog.jonskeet.uk/category/nodatime/ - MethodMan
1
请问您能否澄清一下您的问题?如果您想要检查他们的时区属性,您可以使用实例的 Zone 属性,该属性返回 DateTimeZone - Soner Gönül
1
您想获取两个底层时间点之间的流逝时间还是想得到墙钟时间的差异? - Matt Johnson-Pint
@MattJohnson 我相信我想要在墙上时钟时间工作。请参见我上面的编辑以获取更多信息。对于JonSkeet,请查看我的编辑,希望它能进一步解释。 - Dizzle
你修改后的问题中提到了“...在考虑夏令时的情况下,两个时间段之间的毫秒数...”,这似乎意味着经过的时间,但接着你又要求墙上时钟时间...请明确一下。也许告诉我们预期的用例?提供一些代码可能会有帮助。请注意,服务器时间是无关紧要的。 - Matt Johnson-Pint
显示剩余3条评论
2个回答

7

试试这个:

ZonedDateTime t1 = LocalDateTime.FromDateTime(startTime).InUtc();
ZonedDateTime t2 = LocalDateTime.FromDateTime(endTime).InUtc();
Duration diff = t2.ToInstant() - t1.ToInstant();

1
这是从两个DateTime值开始的,这不是OP感兴趣的内容... - Jon Skeet
1
好的,我们可以假设OP已经有了t1t2,那么最后一行就是正确的,关于获取它们之间经过的时间,尽管我们仍然不确定这是否是OP所要求的。 - Matt Johnson-Pint
这正是我所期望的,只是当我提出问题时,我没有足够理解问题领域。 - Dizzle

0
“两个时期之间”并没有太多意义,因为ZonedDateTime不是一个时期。如果您有两个ZonedDateTime值,您可能只需要在这两个值上调用ToInstant,然后从一个瞬间中减去另一个瞬间以获得持续时间...”
Jon Skeet的这条评论回答了这个问题,调用ToInstant允许您使用减[-]和加[+]运算符。

如果你要自己回答问题,更新问题以使其更具体至少会有所帮助。然后我认为比这个更好的答案也可以写出来... - Jon Skeet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接