【发布时间】:2015-02-02 18:01:50
【问题描述】:
我从我的数据库中检索时区偏移值。我得到的价值是及时的。
例如可以是"-5:00"、"+7:30"、"+3:00"等
如何将其转换为双精度,以便对 DateTime 对象进行 AddHours() 调用?
【问题讨论】:
标签: c# datetime timezone offset
我从我的数据库中检索时区偏移值。我得到的价值是及时的。
例如可以是"-5:00"、"+7:30"、"+3:00"等
如何将其转换为双精度,以便对 DateTime 对象进行 AddHours() 调用?
【问题讨论】:
标签: c# datetime timezone offset
John Koerner answer 有一些缺点;
+ 或-,可能需要额外的字符串操作。它可以处理- 或无符号,但它不能处理+ 字符本身。TimeSpan.Parse(string) 过载,如果CurrentCulture 的TimeSeparator 不是:(我知道这很罕见)这个方法会抛出FormatException。除此之外,我认为TimeSpan.Parse 不是解析UTC Offset 的最佳方式。确实Offset 也是一个时间间隔,但是这个值可能并不总是被成功解析。
我认为最好的选择是DateTimeOffset.TryParseExact method 和zzz 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])。
【讨论】:
使用TimeSpan.Parse 方法:
var time = "+7:30";
time = time.Replace("+", ""); // Remove the + if it is there.
var hours = TimeSpan.Parse(time).TotalHours;
【讨论】: