无法让NodaDateTime识别除UTC以外的任何其他偏移量格式。+HH
下面的工作正常。
var pattern = ZonedDateTimePattern.CreateWithInvariantCulture("dd/MM/yyyy HH:mm:ss +o<HH>", DateTimeZoneProviders.Tzdb);
var dateString = "24/03/2020 13:44:58 +00";
var result = pattern.Parse(dateString);
下面就不行了
var pattern = ZonedDateTimePattern.CreateWithInvariantCulture("dd/MM/yyyy HH:mm:ss +o<HH>", DateTimeZoneProviders.Tzdb);
var dateString = "24/03/2020 13:44:58 +10";
var result = pattern.Parse(dateString);
事实上,除了+00以外,其他的偏移量都不行。而且它也表现出与+o相同的行为。
问题是你想把某件事情解析成一个日期时间,而不是 时区但你实际上只是提供了一个 偏移. 这意味着Noda Time使用模式中 "模板 "的默认时区,即UTC。然后,它检查值中的偏移量对值中的本地日期时间是否有效,以UTC为单位......除非是0,否则永远不会有效。
指定的偏移量对于给定的日期时间是无效的。正在解析的值:'24032020 13:44:58 +10'。
你得到的值并不真正代表 "带有时区的日期和时间"--它代表 "带有UTC偏移的日期和时间"。在Noda Time中,这是由 "Noda Time "中的 OffsetDateTime
型。只要使用 OffsetDateTimePattern
一切都会好起来的。
var pattern = OffsetDateTimePattern.CreateWithInvariantCulture("dd/MM/yyyy HH:mm:ss +o<HH>");
var dateString = "24/03/2020 13:44:58 +10";
var result = pattern.Parse(dateString);
Console.WriteLine(result.Value); // Successful :)