在时区之间转换时间时。我发现以下代码有效。但是,我不确定如何以编程方式将什么作为 ZonedDateTime
构造函数的偏移量。我可以选择芝加哥地区的一个偏移量,只有两个,因为它要么没有夏令时,但我怎么知道我使用哪一个,对于有两个以上的时区,什么是最好的填充该偏移量的方法?
谢谢
吉姆
var zoneLA = c.GetZoneOrNull("America/Los_Angeles");
var zoneChicago = c.GetZoneOrNull("America/Chicago");
var zdtChicago = new ZonedDateTime( LocalDateTime.FromDateTime(DateTime.Now)
, zoneChicago
, zoneChicago.MaxOffset);
var zdtLA = zdtChicago.WithZone(zoneLA);
最佳答案
如果您对当前时间感兴趣,您可以使这个变得更简单 - 并且实际上更易于测试。让您的代码采用 IClock
作为“提供当前时刻的服务”。具体实现使用 SystemClock.Instance
在生产中,但 FakeClock
用于测试。
IClock
有一个成员:Now
。这将返回当前的 Instant
及时,它与时区甚至日历系统无关。
通过 Instant
和时区,您可以轻松获取 ZonedDateTime
:
Instant now = clock.Now;
var zone = DateTimeZoneProviders.Tzdb["America/Los_Angeles"];
ZonedDateTime = now.InZone(zone);
它将计算出本地日期/时间和偏移量。你不需要做任何聪明的事情:)
关于timezone-offset - 确定如何在 ZoneDateTime 上使用 nodaTime 和 withZone 计算不同时区的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16575438/