Convert DateTime from specific time zone to UTC using Nodatime?
好的,我有一个托管在中央标准时区的Web服务器。 IIS服务器配置为时区,因此每当在服务器上使用DateTime.Now或创建类型为Local的新DateTime时,它都处于中央时间。
问题是该网站是(国际)国内申请,我可以在美国或加拿大的任何地方拥有客户。该网站拥有的一个东西是用于安排约会的"调度程序"。我们决定易于开发,以UTC格式将所有DateTime值存储在数据库中,并且所有流入和流出API的流量也都是UTC。问题是当我在服务器端创建日期/时间值时,我经常遇到问题。
比方说,我需要以编程方式为服务器上太平洋标准时区的客户端创建约会,时间为上午8点。在过去,我做过这样的事情:
1 2 3 |
我在我的程序中做了很多其他的日期/时间操作,我想要去Nodatime而不是。我知道我可以很容易地从Nodatime变量中获取UTC DateTime。我感到困惑的是如何在特定日期/时间为特定时区创建Nodatime变量?我看到的所有例子都与模式和阅读字符串或创建一个本质上是"现在"的Instant有关。我想做一些事情,比如使用现有的BCL DateTime对象,无论"Kind"如何,并将其转换为具有我设置的特定时区的Nodatime对象。
我认为Nodatime是一个很棒的图书馆,但阅读用户指南只会让我对转换进出BCL感到头疼。
What I am confused about is how to create a Nodatime variable for a specific time zone at a specific date/time?
这相对容易:
1 2 3 | LocalDateTime local = new LocalDateTime(2015, 4, 17, 8, 0, 0); DateTimeZone zone = DateTimeZoneProviders.Tzdb["America/Los_Angeles"]; ZonedDateTime zonedTime = local.InZoneLeniently(zone); |
"宽大"部分真的取决于你想要发生什么,如果早上8点结果被跳过或模棱两可 - 在这种情况下不会发生,但这是要记住的事情。 Noda Time允许您以各种方式处理此问题 - 用户指南详细介绍。
请注意,如果您更愿意考虑进行转换的区域,则可以使用