【问题标题】:NodaDateTime ZonedDateTimePattern Parse not recognising offsetNodaDateTime ZonedDateTimePattern Parse 无法识别偏移量
【发布时间】:2020-04-21 23:54:50
【问题描述】:

无法让 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】:

问题在于您试图将某些内容解析为日期/时间和时区,但实际上您只是提供了一个偏移量。这意味着 Noda Time 使用模式中“模板”中的默认时区,即 UTC。然后它检查值中的偏移量对于值中的本地日期/时间是否有效,以 UTC 表示...除非它是 0,否则它永远不会是有效的。异常试图说明这一点:

指定的偏移量对于给定的日期/时间无效。正在解析的值:'24/03/2020 13:44:58 +10'。

您获得的值并不真正代表“带有时区的日期和时间” - 它表示“带有 UTC 偏移量的日期和时间”。在 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 :)

【讨论】:

    猜你喜欢
    • 2019-11-25
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 2015-09-20
    • 2015-07-20
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    相关资源
    最近更新 更多