【问题标题】:I want to show the time in GMT from (1800+0100)我想显示从 (1800+0100) 开始的 GMT 时间
【发布时间】:2011-06-19 21:05:49
【问题描述】:

我的表中有一个 varchar 数据类型的字段,其中包含 1800+0100 的时间,我怎样才能像格林威治标准时间 19:00 这样显示它?是否有任何 C# 方法将时间作为 1800+0100 并转换为 19:00?

提前致谢。任何帮助将不胜感激。

【问题讨论】:

  • 1800+0100 实际上是 17:00 GMT,不是 19:00。

标签: c# gmt


【解决方案1】:

DateTime 类支持Add methods 用于DateTime 对象。您可以通过添加所需的任何时间单位将一个时间转换为另一个时间。

【讨论】:

    【解决方案2】:

    您可以为此使用DateTimeOffset。您从时间和偏移量的constructing 实例开始,然后获取UtcDateTime 属性。

    【讨论】:

      【解决方案3】:

      如果您的时间实际上是在ISO-8601 format,那么您可以这样做:

      DateTime dt = DateTime.ParseExact("1800+0100", "HHmmzzz", null,
                                        DateTimeStyles.AdjustToUniversal);
      Console.WriteLine(dt.TimeOfDay);  // 17:00:00
      

      但请注意,这(正确)输出 "17:00:00",而不是 "19:00:00"

      如果您的字符串不是 ISO-8601 格式 - 并且 "1800+0100" 确实意味着表示 19:00 GMT - 那么您需要手动解析字符串,或者在将其传递给ParseExact 之前对其进行预处理。可能是这样的:

      string s = "1800+0100";
      
      string temp = s.Substring(0, 4) + ((s[4] == '+') ? '-' : '+') + s.Substring(5);
      DateTime dt = DateTime.ParseExact(temp, "HHmmzzz", null,
                                        DateTimeStyles.AdjustToUniversal);
      Console.WriteLine(dt.TimeOfDay);  // 19:00:00
      

      【讨论】:

      • 谢谢卢克,你用例子解释了,太棒了!它解决了我的问题。
      【解决方案4】:

      请注意,英国仅在冬季使用 GMT(通用时间),而在夏季使用夏季时间。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-25
        • 2017-10-20
        • 2021-09-02
        • 2015-12-06
        • 2011-11-15
        相关资源
        最近更新 更多