如何解析时区偏移字符串?

rmh*_*rmh 4 c# timezone datetime offset

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

例如,它可能是 "-5:00""+7:30""+3:00",等。

如何将其转换为 double 以便我可以AddHours()DateTime对象进行调用?

Son*_*nül 5

John Koerner 的回答有一些缺点;

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

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

我认为最好的选择是带有格式说明符的DateTimeOffset.TryParseExact方法。由于属性将其值返回为,因此完全可以与 一起使用。zzzDateTimeOffset.OffsetTimeSpanDateTime

例如;

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);
Run Code Online (Sandbox Code Playgroud)

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