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

4

我从数据库中检索到一个时区偏移量的值。我得到的值是时间格式。

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

我该如何将其转换为double类型,以便可以在DateTime对象上调用AddHours()方法?

2个回答

6

John Koerner的回答存在一些问题:

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

除了这些问题之外,我认为TimeSpan.Parse不是解析UTC偏移量的最佳方式。虽然一个Offset也是一个时间间隔,但是这个值可能无法成功地解析。

我认为最好的选择是使用DateTimeOffset.TryParseExact方法zzz格式说明符。由于DateTimeOffset.Offset属性将其值作为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偏移格式 (±[hh]:[mm], ±[hh][mm], 或 ±[hh])。


3
使用TimeSpan.Parse方法:

TimeSpan.Parse

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接