如何解析无分隔符的DateTime字符串?解决2024093013580700解析报错
问题分析
解析失败核心原因有两点:
- 格式符不匹配24小时制:你用的
hh是12小时制格式符,无法解析字符串里的13这个24小时制小时数; - 格式长度与字符串不匹配:
yyyyMMddhhmmss仅对应14位字符串,但目标字符串是16位;yyyyMMddhhmmsszz里的zz仅代表时区偏移小时部分,覆盖不了最后两位长度,且hh的问题仍存在。
可行解析方案
针对16位字符串2024093013580700的结构(年4+月2+日2+时2+分2+秒2+末尾2位),分两种常见场景处理:
场景1:末尾两位是毫秒(最常见)
用24小时制格式符HH搭配两位毫秒格式符ff,直接匹配完整字符串:
DateTime.ParseExact("2024093013580700", "yyyyMMddHHmmssff", CultureInfo.InvariantCulture);
场景2:末尾两位是时区偏移分钟
如果最后两位代表时区偏移的分钟(比如对应+0000时区),用带分钟的时区格式符zzzz,同时替换hh为HH:
DateTime.ParseExact("2024093013580700", "yyyyMMddHHmmsszzzz", CultureInfo.InvariantCulture);
备选方案:手动拆分处理
若不确定末尾两位含义,可先解析前14位基础时间,再单独处理末尾部分:
var inputStr = "2024093013580700"; // 解析前14位日期时间 var baseDateTime = DateTime.ParseExact(inputStr.Substring(0, 14), "yyyyMMddHHmmss", CultureInfo.InvariantCulture); // 处理末尾两位(示例转为毫秒,其他含义可自行修改逻辑) var extraPart = int.Parse(inputStr.Substring(14, 2)); var finalDateTime = baseDateTime.AddMilliseconds(extraPart * 10); // 两位毫秒转实际毫秒值
内容的提问来源于stack exchange,提问作者dvn
相关产品推荐
相关产品推荐

