确定如何计算整个使用nodaTime和withZone上ZoneDateTime不同的时区时间(De

2019-09-03 12:31发布

当在时区之间转换时间。 我发现如下的代码工作。 但是我不知道如何编程用什么作为我的构造函数偏移ZonedDateTime 。 我有一个选择上zoneChicago的偏移之一,这是只有两个,因为它无论是与我们没有夏令时,但我怎么知道我用哪一个,并有更多的则只有两个时区,什么是最好的方式来填充偏移?

谢谢,

吉姆

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);

Answer 1:

如果你有兴趣在目前的时间,就可以让这个简单-的确更容易测试。 使你的代码采取IClock为“服务及时提供当前时刻”。 对于具体实施,使用SystemClock.Instance在生产,但FakeClock进行测试。

IClock只有一个成员: Now 。 返回当前Instant的时间,这是不依赖于一个时区,甚至一个日历系统。

随着Instant和时区,你可以很容易地得到一个ZonedDateTime

Instant now = clock.Now;
var zone = DateTimeZoneProviders.Tzdb["America/Los_Angeles"];
ZonedDateTime = now.InZone(zone);

这将制定出当地的日期/时间和偏移量是什么。 你不需要做任何事情聪明:)



文章来源: Determine how to calculate times across different timezones using nodaTime and withZone on ZoneDateTime