gpt4 book ai didi

c# - 如何解析xs :date with NodaTime?

转载 作者:行者123 更新时间:2023-11-30 20:30:42 25 4
gpt4 key购买 nike

我必须处理由各种外部系统发送的也包含一些日期的 XML 文档。 xs:date 允许向日期添加“时区”,即偏移量。例如。 “2017-06-02+03:00” 是有效值。此外,在单个 XML 文档中偏移量的使用也不一致。有些日期有偏移,大多数没有。

LocalDatePattern.IsoPattern 不处理带有偏移量的值,并且我对自定义模式的尝试也没有结果。

将这些值解析为 LocalDate 的最佳方法是什么?

我讨论了两种可能的选择:

  1. 只需从文本值中去除偏移部分,然后继续使用 LocalDatePattern.IsoPattern
  2. OffsetDateTimePattern 与不包含时间部分的自定义模式结合使用,然后根据解析的值手动构造 LocalDate

我最终选择了选项 1,因为我不需要任何转换的偏移量。

最佳答案

这样的东西应该很适合您的用例:

public static bool TryParseXsDate(string xsDate, out LocalDate localDate)
{
// First try directly, since xsDate's offset is optional.
var result1 = LocalDatePattern.Iso.Parse(xsDate);
if (result1.Success)
{
localDate = result1.Value;
return true;
}

// Now try with an offset
var result2 = OffsetDatePattern.Parse(xsDate);
if (result2.Success)
{
localDate = result2.Value.Date;
return true;
}

// Failed parsing
localDate = default(LocalDate);
return false;
}

这将忽略所有情况下的偏移。

如果您确实需要偏移量,请记住xs:Date将其定义为日期第一个时刻的偏移量。因此,一旦应用于时区,午夜可能在当天出现两次,或者这一天可能从凌晨 1:00 开始。您需要一个自定义 ZoneLocalMappingResolver 函数来正确处理该问题。

关于c# - 如何解析xs :date with NodaTime?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44409687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com