分析时获取DateTime值的原始时区
本文关键字:原始 时区 DateTime 获取 | 更新日期: 2023-09-27 17:59:56
我有一组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
让我试着澄清一些事情。。
首先,DateTime
和DateTimeOffset
都是时区感知。DateTime
可能知道它是UTC
或Local
,但它仍然不知道本地的真正含义。DateTimeOffset
稍微好一些,它保留了一个带有UTC偏移的UTC时间。但是,这些信息仍然不足以确定时区,因为不同的时区可能具有相同的偏移量。
DateTime.Parse
通常返回一个DateTime
,其中Kind
为Unspecified
。它返回;
- 当您的字符串具有时区信息时为
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
作为Kind
返回。这就是为什么无论你使用哪种,你都不会得到真实的时区信息。
我建议你改用NodaTime
。它具有定义的ZonedDateTime
结构;
特定时区的
LocalDateTime
偏移以区分其他不明确的瞬间。
这种结构更适合您的情况。