C#中DateTimeOffset值「2019-01-31T17:32:00-05:00」对应的格式是什么?
C# DateTimeOffset 格式校验方案
你需要匹配的是ISO 8601带时区偏移的完整日期时间格式,对应的C#格式字符串为yyyy-MM-ddTHH:mm:sszzz,其中zzz字段会自动适配±HH:mm格式的时区偏移,完全兼容东部时区夏令时/冬令时切换带来的偏移值变化。
场景1:已有DateTimeOffset?值,校验其字符串表示符合要求
using System.Globalization; public bool CheckDateTimeOffsetFormat(DateTimeOffset? input) { // 可空类型非空校验 if (!input.HasValue) { return false; } const string targetFormat = "yyyy-MM-ddTHH:mm:sszzz"; // 转为指定格式字符串后做严格校验 string formattedStr = input.Value.ToString(targetFormat, CultureInfo.InvariantCulture); return DateTimeOffset.TryParseExact(formattedStr, targetFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out _); }
场景2:从原始字符串解析为DateTimeOffset?,同时校验格式
using System.Globalization; public bool TryParseCustomDateTime(string input, out DateTimeOffset? result) { result = null; const string targetFormat = "yyyy-MM-ddTHH:mm:sszzz"; if (DateTimeOffset.TryParseExact(input, targetFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTimeOffset parsedVal)) { result = parsedVal; return true; } return false; }
格式字段说明
yyyy:4位完整年份MM:2位月份,不足自动补0dd:2位日期,不足自动补0T:固定分隔符,区分日期和时间片段HH:24小时制2位小时,不足自动补0mm:2位分钟,不足自动补0ss:2位秒数,不足自动补0zzz:带正负号的时区偏移,格式为HH:mm,可正常匹配东部时区夏令时的-04:00和冬令时的-05:00
注意:必须传入
CultureInfo.InvariantCulture参数,避免不同地区的系统文化设置修改日期、时间分隔符,保证格式严格匹配要求。
内容的提问来源于stack exchange,提问作者Bmoe
相关产品推荐
相关产品推荐

