C#拼接CSV日期与秒数生成含毫秒DateTime对象报错咨询
问题分析与解决方案
首先直接给出结论:你想要的「直接拼接成03-10-2022 15:20:1200.34格式后转换为DateTime」不可行,核心原因有两点:
- DateTime类型的秒分量合法范围是0-59,你拼接后的字符串里秒部分是1200,远超有效值范围,
ParseExact无法识别 - 你的格式字符串用了
MM/dd/yyyy(斜杠分隔),但实际DATETIME列是03-10-2022(横杠分隔),格式规则不匹配
正确的处理方式是分开解析两列数据后再合并:
- 先将DATETIME列解析为基础DateTime对象
- 将SECONDS列解析为总秒数(包含小数部分的毫秒),通过
AddSeconds方法把秒数叠加到基础DateTime上
示例代码
// 解析基础日期时间(注意格式与原数据的横杠分隔匹配) string d0 = csv.GetField<string>("DATETIME"); DateTime baseDt = DateTime.ParseExact(d0, "MM-dd-yyyy HH:mm", CultureInfo.InvariantCulture); // 解析总秒数并叠加到基础时间 string d5 = csv.GetField<string>("SECONDS"); if (double.TryParse(d5, out double totalSeconds)) { DateTime finalDt = baseDt.AddSeconds(totalSeconds); // finalDt即为包含毫秒的目标DateTime对象 } else { // 处理SECONDS列解析失败的异常场景 }
补充说明
如果硬要尝试拼接后解析,需要先把总秒数转换成「秒.毫秒」的合法格式(比如1200.34秒 = 20分00秒340毫秒),但这种做法冗余且容易出错,远不如直接使用AddSeconds高效可靠。
内容的提问来源于stack exchange,提问作者Dark Angel
相关产品推荐
相关产品推荐

