C#使用DateTime.ParseExact转换带时区时间字符串1999-12-31T23:00:00.000+0000问题
时间格式转换解决方案
错误原因排查
你当前的代码存在三处格式匹配错误:
- 小时占位符使用了12小时制的
hh,目标字符串中的23属于24小时制,需替换为HH - 秒和毫秒的分隔符写为冒号,且毫秒占位符错误,实际格式应为
.fff - 时区偏移占位符
ZZZZZ无效,四位数字UTC偏移量对应的匹配符为zzz,如果输入的时区偏移不带冒号,可直接用标准ISO格式解析避免自定义格式出错。
可用解决方案
方案1:使用正确的自定义格式字符串
DateTime result = DateTime.ParseExact("1999-12-31T23:00:00.000+0000", "yyyy-MM-ddTHH:mm:ss.fffzzz", CultureInfo.InvariantCulture);
如果解析时提示时区格式不匹配,推荐使用更稳妥的DateTimeOffset处理带时区的时间:
DateTimeOffset offsetResult = DateTimeOffset.ParseExact("1999-12-31T23:00:00.000+0000", "yyyy-MM-ddTHH:mm:ss.fffzzz", CultureInfo.InvariantCulture); // 按需取对应时区的时间 DateTime utcTime = offsetResult.UtcDateTime; DateTime localTime = offsetResult.LocalDateTime;
方案2:直接解析标准ISO 8601格式
你提供的目标字符串属于标准ISO 8601时间格式,无需指定自定义格式即可直接解析:
// 直接解析标准格式字符串 DateTimeOffset standardResult = DateTimeOffset.Parse("1999-12-31T23:00:00.000+0000", CultureInfo.InvariantCulture);
内容的提问来源于stack exchange,提问作者Arlunily
相关产品推荐
相关产品推荐

