从DateTime获取时区

dbk*_*bkk 97 .net c# timezone datetime

.Net DateTime是否包含有关创建时区的信息?

我有一个库,从最后有"+ zz"的格式解析DateTime,当它正确解析并调整本地时间时,我需要从DateTime对象获取特定时区.

这有可能吗?我只能看到DateTime.Kind,它指定时间是本地还是UTC.

Jon*_*eet 131

DateTime本身不包含实时区域信息.它可能知道它是UTC还是本地的,但不知道本地的真正含义.

DateTimeOffset稍好一些 - 基本上是UTC时间和偏移量.然而,这仍然不足以确定时区,因为许多不同的时区在任何一个时间点都可以具有相同的偏移.这听起来对你来说可能已经足够了,因为在解析日期/时间时你需要处理的是偏移量.

从.NET 3.5开始支持时区要好得多,但我真的很想看到标准的"ZonedDateTime"或类似的东西 - UTC时间和实际时区.构建自己的很容易,但在标准库中看到它会很好.

编辑:将近四年后,我现在建议使用Noda Time,它具有更丰富的日期/时间类型.我有点偏见,作为Noda Time的主要作者:)

  • @AnneTheAgile:我个人建议使用我自己的Noda Time库,当然:) (3认同)
  • CodePlex上的PublicDomain项目为您完成此任务. (2认同)

Ger*_*nck 34

没有.

开发人员负责通过某种外部机制跟踪与DateTime值相关的时区信息.

从一个优秀的文章引述这里.必须为每个.Net开发人员阅读.

所以我的建议是编写一个适合您需求的包装类.

  • 这篇文章可以概括为:“.NET 中的 DateTime 有错误和缺点。_你_处理它。” (3认同)

Che*_*eso 5

有一个用于.NET公共域TimeZone库.真有用.它将满足您的需求.

解决一般情况下的时区问题比你想象的要难.