gpt4 book ai didi

c# - 解析时获取 DateTime 值的原始时区

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

我有一组 ISO 8601 格式的 DateTime 文本表示,其中一些指定了时区。默认情况下,DateTime.Parse() 将它们调整为本地时区(或使用特殊选项调整为 UTC),但在这两种情况下都缺少原始时区。但是,我需要检测哪些 DateTime 字符串是用时区指定的,并获取其值以进行进一步处理。

关于如何做到这一点有什么想法吗?

UPD 示例输入:

2015-06-26T22:57:09Z
2015-06-26T22:57:09
2015-06-26T22:57:09+01:00

最佳答案

让我试着弄清楚一些事情..

首先 DateTimeDateTimeOffset 都是时区感知。 DateTime 可能知道它是 UTCLocal,但它仍然不知道本地 真的意味着。 DateTimeOffset 稍微好一些,它使用 UTC offset 保持 UTC 时间.但是,这些信息仍然不足以确定时区,因为不同的时区可能具有相同的偏移量。

DateTime.Parse 通常返回一个 DateTimeKindUnspecified。它返回;

  • Local 当您的字符串包含时区信息时。
  • UTC 当您的字符串具有时区信息并使用 AdjustToUniversal 样式时您的字符串具有 Z 或 GMT 指示符并使用 RoundtripKind 样式。

这就是为什么 DateTime.Parse("2015-06-26T22:57:09") 返回 Unspecified 但是 DateTime.Parse("2015-06 -26T22:57:09Z")DateTime.Parse("2015-06-26T22:57:09+01:00") 返回 Local 作为种类。这就是为什么无论您使用哪个,都不会获得真实时区信息。

我建议您使用 NodaTime反而。它有一个 ZonedDateTime定义的结构;

A LocalDateTime in a specific time zone and with a particular offset to distinguish between otherwise-ambiguous instants.

这种结构更适合您的情况。

关于c# - 解析时获取 DateTime 值的原始时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31086588/

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