从DateTime获取时区

.Net DateTime是否包含创build时区的信息?

我有一个库parsingdate时间从最后有“+ zz”的格式,当它parsing正确,并调整本地时间,我需要从DateTime对象得到什么特定的时区。

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

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

DateTimeOffset稍微好一点 – 这基本上是UTC时间和偏移量。 但是,这还不足以确定时区,因为许多不同的时区在任何时间点都可能具有相同的偏移。 这听起来好像对你来说可能已经足够了,因为在分析date/时间的时候你需要处理的是偏移量。

对.NET 3.5的时区的支持比现在好很多,但我真的很想看到一个标准的“ZonedDateTime”或类似的东西 – UTC时间和实际时区。 build立你自己的是很容易的,但是在标准库中看到它会很好。

编辑:近四年后,我现在build议使用具有相当丰富的date/时间types的野田时间 。 作为野田时间的主要作者,我有偏见

没有。

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

这里引用了一篇优秀的文章。 必须为每个.Net开发者阅读。

所以我的build议是写一个适合你需求的包装类。

.NET有一个公共领域的TimeZone库 。 真的有用。 它会回答你的需求。

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

你可以使用TimeZoneInfo

TimeZone类可以识别本地时区,并且可以在协调世界时(UTC)和本地时间之间转换时间。 TimeZoneInfo对象可以表示任何时区,并且可以使用TimeZoneInfo类的方法将一个时区中的时间转换为任何其他时区中的相应时间。 TimeZoneInfo类的成员支持以下操作:

  1. 检索操作系统已经定义的时区。

  2. 枚举系统上可用的时区。

  3. 转换不同时区之间的时间。

  4. 创build一个尚未被操作系统定义的新时区。

    序列化时区以供稍后检索。

从API( http://msdn.microsoft.com/en-us/library/system.datetime_members ( VS.71 ) .aspx )它似乎不能显示所用时区的名称。