我从数据库中检索timeZone偏移量的值。我得到的价值是时间。
例如,它可以是"-5:00"
,"+7:30"
,"+3:00"
等。
如何将其转换为双倍,以便我可以AddHours()
对DateTime
对象进行{{1}}调用?
答案 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)
重载,如果CurrentCulture
的TimeSeparator
不是:
(我知道这很罕见),此方法会抛出{ {1}}。除此之外,我认为FormatException
不是解析UTC Offset的最佳方式。实际上TimeSpan.Parse
也是一个时间间隔,但 这个值可能并不总是成功解析。
我认为最好的选择是DateTimeOffset.TryParseExact
method和zzz
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]
)。