NodaDateTime ZonedDateTimePattern解析不识别偏移量。

问题描述 投票:0回答:1

无法让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相同的行为。

date datetime date-parsing nodatime
1个回答
1
投票

问题是你想把某件事情解析成一个日期时间,而不是 时区但你实际上只是提供了一个 偏移. 这意味着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 :)
© www.soinside.com 2019 - 2024. All rights reserved.