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

问题描述 投票:0回答:2

我从数据库中检索时区偏移值。我得到的价值是及时的。

例如,可以是

"-5:00"
"+7:30"
"+3:00"

如何将其转换为双精度,以便我可以对

AddHours()
对象进行
DateTime
调用?

c# datetime timezone offset
2个回答
7
投票

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]
)。


3
投票
使用

TimeSpan.Parse 方法:

var time = "+7:30"; time = time.Replace("+", ""); // Remove the + if it is there. var hours = TimeSpan.Parse(time).TotalHours;
    
© www.soinside.com 2019 - 2024. All rights reserved.