当我查找将时间转换为NodaTime的方法时,我发现了许多帖子,但没有一个给出我需要的简单明了的答案。
我的需求是:
- A DateTime object (DateTime myDateTime)
- An Olson timezone (var TZ = "America/Los_Angeles")
我希望:
- A ZonedDateTime object (ZonedDateTime myZonedDateTime)
理想情况下,我正在寻找一些类似于助手的东西,例如:
var myZonedDateTime = ZonedDateTime.From(myDateTime, TZ);
我看到的所有示例都将日期转换为字符串,然后解析字符串,这似乎非常奇怪。
有一个ZonedDateTime.FromDateTimeOffset()方法,但偏移量和时区是不同的,因为时区可以处理夏令时。
DateTime
的“种类”是什么?如果DateTime
值有歧义或被跳过,您想发生什么?(我希望这只涉及使用LocalDateTime.FromDateTime(myDateTime).InZoneLeniently(zone)
或类似方法实现。) - Jon SkeetmyDateTime.Kind
返回什么呢?首先,myDateTime
是从哪里来的?(如果是字符串,最好直接解析为LocalDateTime
。)我假设你已经发现了DateTimeZoneProviders.Tzdb [id]
来获取DateTimeZone
? - Jon SkeetZonedDateTimePattern
一次完成整个操作。我根据问题中的信息添加了一个答案,但是如果您想使用字符串版本更新它,我可以写一个额外的部分。 - Jon Skeet