我从数据库中检索到一个时区偏移量的值。我得到的值是时间格式。
例如,它可能是"-5:00"
,"+7:30"
,"+3:00"
等。
我该如何将其转换为double类型,以便可以在DateTime
对象上调用AddHours()
方法?
John Koerner的回答存在一些问题:
+
或-
,可能需要进行额外的字符串操作。-
或没有符号是可以处理的,但是不能处理+
字符本身。TimeSpan.Parse(string)
重载,如果CurrentCulture
的TimeSeparator
不是:
(我知道这很少见),此方法会抛出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]
)。
var time = "+7:30";
time = time.Replace("+", ""); // Remove the + if it is there.
var hours = TimeSpan.Parse(time).TotalHours;