如何将"+02:00"类时区字符串优雅转换为TimeSpan?
优雅转换带正负号的时区字符串为TimeSpan
要解决+02:00、-01:00这类带符号的时区偏移字符串转TimeSpan的问题,核心是让解析逻辑识别开头的正负号。以下是两种简洁可行的方案:
方案1:使用TimeSpan标准格式字符串"g"
标准格式"g"天然支持带符号的短时间间隔解析,完美适配时区偏移场景,代码最简洁:
[TestMethod()] public void ShouldParseTimeZoneStringToTimeSpan() { var positiveValue = "+02:00"; var positiveActual = TimeSpan.ParseExact(positiveValue, "g", CultureInfo.InvariantCulture); Assert.AreEqual(TimeSpan.FromHours(2), positiveActual); var negativeValue = "-01:00"; var negativeActual = TimeSpan.ParseExact(negativeValue, "g", CultureInfo.InvariantCulture); Assert.AreEqual(TimeSpan.FromHours(-1), negativeActual); }
"g"格式的解析规则为[-][d.]hh:mm:ss[.fffffff],完全覆盖时区偏移的格式需求。
方案2:自定义格式字符串匹配正负号
如果需要更精准控制格式,可以用自定义格式字符串明确匹配正负号:
[TestMethod()] public void ShouldParseTimeZoneStringToTimeSpan() { // 同时兼容正负号的通用格式 var format = @"(\+|-)?hh\:mm"; var actual = TimeSpan.ParseExact("+02:00", format, CultureInfo.InvariantCulture); Assert.AreEqual(TimeSpan.FromHours(2), actual); actual = TimeSpan.ParseExact("-01:00", format, CultureInfo.InvariantCulture); Assert.AreEqual(TimeSpan.FromHours(-1), actual); }
(\+|-)?表示可选匹配开头的+或-符号hh\:mm用来匹配小时和分钟部分,\:是转义后的冒号(避免被格式说明符误解析)
内容的提问来源于stack exchange,提问作者Rene
相关产品推荐
相关产品推荐

