如何在C#中拼接字符串生成带毫秒的DateTime实例?
在C#中拼接字符串生成带高精度毫秒的DateTime值
问题根源
你直接拼接得到的字符串"03-10-2022 15:20:10024.45"不符合.NET DateTime的标准解析规则:
- DateTime的毫秒位仅支持0-999的整数,而你的
10024.45是总毫秒数(包含秒级的时间量),不是单纯的毫秒位。 - 标准的高精度时间格式应为
"dd-MM-yyyy HH:mm:ss.ffffff"(秒后接毫秒/微秒),你的格式缺少秒位,直接在分钟后追加超大数值,导致解析失败。
可行解决方案
方案1:直接计算时间增量(推荐)
无需强行拼接字符串,先解析基础时间,再把毫秒数值转换成时间增量加到基础时间上:
using System; using System.Globalization; class Example { static void Main() { string a = "03-10-2022 15:20"; string b = "10024.45"; // 解析基础日期时间(指定格式避免文化差异) DateTime baseTime = DateTime.ParseExact(a, "dd-MM-yyyy HH:mm", CultureInfo.InvariantCulture); // 解析总毫秒数(支持小数,对应微秒级精度) double totalMs = double.Parse(b, CultureInfo.InvariantCulture); // 生成最终DateTime DateTime finalTime = baseTime.AddMilliseconds(totalMs); // 输出验证(显示到微秒) Console.WriteLine(finalTime.ToString("dd-MM-yyyy HH:mm:ss.ffffff", CultureInfo.InvariantCulture)); // 输出结果:03-10-2022 15:20:10.024450 } }
方案2:拼接成标准格式字符串再解析
如果坚持要通过拼接字符串实现,需先把总毫秒数转换成秒.微秒的格式,再拼接后解析:
using System; using System.Globalization; class Example { static void Main() { string a = "03-10-2022 15:20"; string b = "10024.45"; double totalMs = double.Parse(b, CultureInfo.InvariantCulture); TimeSpan timeSpan = TimeSpan.FromMilliseconds(totalMs); // 拼接成标准格式:基础时间 + 秒.微秒 string formattedTime = $"{a}:{timeSpan.Seconds}.{(timeSpan.Milliseconds * 1000 + timeSpan.Ticks % 10000) / 10}"; // 解析拼接后的字符串 DateTime finalTime = DateTime.ParseExact(formattedTime, "dd-MM-yyyy HH:mm:ss.ffffff", CultureInfo.InvariantCulture); Console.WriteLine(finalTime.ToString("dd-MM-yyyy HH:mm:ss.ffffff", CultureInfo.InvariantCulture)); } }
关键说明
不存在“完全不用日期时间函数创建DateTime”的可能:
- DateTime是值类型,必须通过其构造函数或解析方法实例化,这些都属于日期时间相关操作。
- 你的需求本质是将“基础时间+总毫秒增量”转换成DateTime,核心是处理时间增量,而非单纯的字符串拼接。
内容的提问来源于stack exchange,提问作者Dark Angel
相关产品推荐
相关产品推荐

