代码之家  ›  专栏  ›  技术社区  ›  dbkk

从日期时间获取时区

  •  88
  • dbkk  · 技术社区  · 16 年前

    .NET日期时间是否包含有关创建它的时区的信息?

    我有一个库,它从末尾带有“+zz”的格式分析日期时间,虽然它正确地分析和调整了本地时间,但我需要从日期时间对象中获得特定时区的内容。

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

    6 回复  |  直到 6 年前
        1
  •  125
  •   Sergii Illiukhin Jon Skeet    7 年前

    日期时间本身不包含实时区域信息。它 可以 知道它是UTC还是本地的,但不知道本地的真正含义。

    datetimeoffset更好一些-基本上是一个UTC时间和一个偏移量。但是,这还不足以确定时区,因为许多不同的时区在任何一个时间点都可以有相同的偏移量。这听起来对您来说可能已经足够好了,因为在分析日期/时间时,您需要处理的只是偏移量。

    从.NET 3.5开始对时区的支持比以前好多了,但我真的希望看到一个标准的“ZonedDateTime”或类似的东西—一个UTC时间和一个实际时区。构建自己的库很容易,但是在标准库中看到它会很高兴。

    编辑:大约四年后,我建议使用 Noda Time 它有一组更丰富的日期/时间类型。不过,作为《野田佳彦时代》的主要作者,我还是有偏见的。

        2
  •  33
  •   Gerrie Schenck    16 年前

    不。

    开发人员负责通过一些外部机制跟踪与日期时间值相关联的时区信息。

    一篇优秀文章的引言 here . 必须为每个.NET开发人员读取。

    所以我的建议是编写一个适合您需要的小包装类。

        3
  •  5
  •   Cheeso    16 年前

    有一个 public domain TimeZone library for .NET . 真的很有用。它可以满足你的需要。

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

        4
  •  2
  •   Shashank Shekhar    12 年前

    你可以使用 时间信息

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

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

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

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

    4. 创建尚未由定义的新时区 操作系统。

      为以后的检索序列化时区。

        5
  •  1
  •   tehvan    16 年前

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

        6
  •  0
  •   Rob    6 年前

    通常的做法是将数据作为日期时间传递,其中“时区”为UTC,然后传递TimeZoneInfo对象,当准备好显示数据时,可以使用TimeZoneInfo对象转换UTC日期时间。

    另一个选项是使用当前时区设置日期时间,然后确保“TimeZone”对于日期时间对象未知,然后确保再次使用TimeZoneInfo传递日期时间,该TimeZoneInfo指示传递的日期时间的时区。

    正如其他人在这里所指出的,如果微软能够做到这一点,并创建一个很好的对象来完成这一切,那就太好了,但是现在你必须处理两个对象。