【问题标题】:How to parse Timezone Offset string?如何解析时区偏移字符串?
【发布时间】:2015-02-02 18:01:50
【问题描述】:

我从我的数据库中检索时区偏移值。我得到的价值是及时的。

例如可以是"-5:00""+7:30""+3:00"

如何将其转换为双精度,以便对 DateTime 对象进行 AddHours() 调用?

【问题讨论】:

    标签: c# datetime timezone offset


    【解决方案1】:

    John Koerner answer 有一些缺点;

    • 基于+-,可能需要额外的字符串操作。它可以处理- 或无符号,但它不能处理+ 字符本身。
    • 由于他使用了TimeSpan.Parse(string) 过载,如果CurrentCultureTimeSeparator 不是:我知道这很罕见)这个方法会抛出FormatException

    除此之外,我认为TimeSpan.Parse 不是解析UTC Offset 的最佳方式。确实Offset 也是一个时间间隔,但是这个值可能并不总是被成功解析。

    我认为最好的选择是DateTimeOffset.TryParseExact methodzzz format specifier。由于DateTimeOffset.Offset property 返回它的值为TimeSpan,所以它完全可以与DateTime 一起使用。

    例如;

    var s = "+05:30";
    DateTimeOffset dto;
    var dtop = DateTimeOffset.TryParseExact(s, "zzz",
                     CultureInfo.InvariantCulture,
                     DateTimeStyles.None, out dto);
    var today = DateTime.Today;
    today = today.AddHours(dto.Offset.TotalHours);
    

    这适用于所有可能的 UTC Offset 格式(±[hh]:[mm]±[hh][mm]±[hh])。

    【讨论】:

      【解决方案2】:

      使用TimeSpan.Parse 方法:

      var time = "+7:30";
      time = time.Replace("+", "");  // Remove the + if it is there.
      
      var hours = TimeSpan.Parse(time).TotalHours;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-05
        • 2017-10-16
        • 1970-01-01
        • 2016-10-30
        • 2015-10-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多