timezone-offset - 确定如何在 ZoneDateTime 上使用 nodaTime 和 withZone 计算不同时区的时间

标签 timezone-offset nodatime

在时区之间转换时间时。我发现以下代码有效。但是,我不确定如何以编程方式将什么作为 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/

相关文章:

c# - 如何解析xs :date with NodaTime?

javascript - Javascript 中的 Date().getTimezoneOffset() 与 .net 服务器端中的 TimeZoneInfo.Local.GetUtcOffset(DateTime.UtcNow).TotalMinutes

time - 在 Go 中将 UTC 时间转换为 "local"时间

oracle - 如何获得 DBTIMEZONE 和 SESSIONTIMEZONE 之间的数值差异?

nodatime - 如何获取nodatime中两个日期之间的天数

c# - 如何让 Xamarin 中的 Noda Time 返回 "America/Los_Angeles"?

c# - NodaTime Invalid DateTime.Kind for Instant.FromDateTimeUtc

带有 DST 的 Java 时区打印不正确的时间(负纪元)

android - 如何获取 UTC 中的时区偏移量(如 UTC+07 :00) from a physical device?

asp.net-mvc-4 - 如何将 IClock 注入(inject) MVC4 中的_Layout?