从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类的成员支持以下操作:
-
检索操作系统已经定义的时区。
-
枚举系统上可用的时区。
-
转换不同时区之间的时间。
-
创build一个尚未被操作系统定义的新时区。
序列化时区以供稍后检索。
从API( http://msdn.microsoft.com/en-us/library/system.datetime_members ( VS.71 ) .aspx )它似乎不能显示所用时区的名称。
- 无法使用visual studio 2013debugging托pipe代码(“无法评估expression式”错误 – 我正在使用debugging版本)(请注意VS 2012的工作原理)
- 如何使entity framework数据上下文只读
- .NET数组的内存布局
- 堆栈跟踪中方法名称末尾的“+ n”值是什么意思?
- 使用Thread.Start和QueueUserWorkItem的优点
- 如何判断.NET应用程序是以DEBUG还是RELEASE模式编译?
- 用正则expression式匹配数字 – 只有数字和逗号
- Object.GetType()的性能
- 使用.NET在Windows中创buildpopup式“烤面包机”通知