如何从已解析的DateTime对象获取原始时区偏移量?
如何从解析后的日期对象中获取原始时区偏移量
你遇到的问题其实是DateTime类型的一个常见局限——当你用DateTime.Parse解析带时区偏移的字符串时,它默认会把时间转换为本地时区(也就是你当前系统的时区),并且不会保留原始的偏移信息。所以你后续调用TimeZone.CurrentTimeZone.GetUtcOffset拿到的只是本地时区的偏移,而非原始的-5:30。
正确的解决方案:改用DateTimeOffset类型
要保留原始的时区偏移,你应该使用DateTimeOffset.Parse来解析字符串,这个类型专门用来存储包含时区偏移的日期时间,直接就能获取原始偏移:
string dateString = "2018-04-20T12:22:32.8526432-05:30"; var objDateOffset = DateTimeOffset.Parse(dateString); // 获取原始时区偏移 TimeSpan originalOffset = objDateOffset.Offset; // 结果为 -05:30:00
为什么DateTime做不到?
DateTime类型的Kind属性会被设置为Local(当解析带偏移的字符串时),它内部只存储转换后的本地时间值,不会记录原始的偏移量。所以一旦完成解析,原始的-5:30信息就已经丢失了,无法从生成的DateTime对象中再获取到。
额外提示
如果你需要同时使用日期时间值和偏移,DateTimeOffset提供了灵活的访问方式:
objDateOffset.DateTime:获取转换为本地时区的DateTime对象objDateOffset.UtcDateTime:获取对应的UTC时间objDateOffset.Offset:直接获取原始时区偏移
内容的提问来源于stack exchange,提问作者Pankaj Kapare
相关产品推荐
相关产品推荐

