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

时间:2014-12-04 18:16:38

标签: c# datetime timezone offset

我从数据库中检索timeZone偏移量的值。我得到的价值是时间。

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

如何将其转换为双倍,以便我可以AddHours()DateTime对象进行{{1}}调用?

2 个答案:

答案 0 :(得分:2)

使用TimeSpan.Parse方法:

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

var hours = TimeSpan.Parse(time).TotalHours;

答案 1 :(得分:2)

John Koerner answer有一些缺点;

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

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

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

例如;

DateTime

这适用于所有可能的UTC Offset格式(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); ±[hh]:[mm]±[hh][mm])。