Azure DevOps REST API返回的日期字符串无法解析为DateTime如何处理
问题原因
- 你拿到的日期字符串不符合标准ISO 8601格式:秒与亚秒(毫秒/微秒/纳秒)部分缺少小数点分隔,导致默认解析器无法识别两部分的边界
- 亚秒部分长度超过.NET
DateTime类型支持的最大7位精度(DateTime精度为100纳秒,对应最多7位小数),多余位数会触发解析异常
解决方案
你可以先对原始日期字符串做格式修正,再用指定格式解析,示例代码如下:
public static DateTime ParseAzureDevOpsWorkItemDate(string rawDateStr) { // 1. 给秒和亚秒部分补小数点:标准格式前19位固定为 yyyy-MM-ddTHH:mm:ss if (rawDateStr.Length > 19 && rawDateStr[19] != '.') { rawDateStr = rawDateStr.Insert(19, "."); } // 2. 截断多余的亚秒位,只保留7位,末尾保留Z标识 const int maxValidLength = 28; // 19位基础部分 + 1位小数点 +7位亚秒 +1位Z = 28位 if (rawDateStr.Length > maxValidLength) { rawDateStr = rawDateStr.Substring(0, maxValidLength - 1) + "Z"; } // 3. 指定格式解析,大写F表示亚秒位可选,兼容不足7位的场景 return DateTime.ParseExact( rawDateStr, "yyyy-MM-ddTHH:mm:ss.FFFFFFFZ", null, System.Globalization.DateTimeStyles.RoundtripKind ); }
调用示例
string rawDt = "2021-09-28T23:59:2411111677Z"; DateTime parsedDt = ParseAzureDevOpsWorkItemDate(rawDt); // 解析结果为:2021-09-28 23:59:24.1111116 UTC
内容的提问来源于stack exchange,提问作者john
相关产品推荐
相关产品推荐

