我从数据库中检索时区偏移值。我得到的价值是及时的。
例如,可以是
"-5:00"
、"+7:30"
、"+3:00"
等
如何将其转换为双精度,以便我可以对
AddHours()
对象进行 DateTime
调用?
John Koerner 的回答有一些缺点;
+
或-
,可能需要额外的字符串操作。它可以处理 -
或无符号,但无法处理
+
字符本身。
TimeSpan.Parse(string)
重载,如果
CurrentCulture
的TimeSeparator
不是:
(我知道这很罕见)这个方法会抛出
FormatException
。
TimeSpan.Parse
不是解析UTC 偏移量 的最佳方法。事实上,
Offset
也是一个时间间隔,但是这个值可能并不总是能够成功解析。 我认为最好的选择是
方法与
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]
)。
TimeSpan.Parse 方法:
var time = "+7:30";
time = time.Replace("+", ""); // Remove the + if it is there.
var hours = TimeSpan.Parse(time).TotalHours;