将字符串"7.30"转换为hh:mm时间格式 实现在C#中计算两个时间差
C# 中"7.30"类时间字符串转换与时间差计算实现方案
注意:所有代码需要提前引入命名空间
using System.Globalization;
1. 格式适配说明
"7.30"这类字符串默认表示「小时.分钟」的时间格式,没有绑定日期的场景下优先用TimeSpan类型存储,需要关联具体日期的场景再适配为DateTime类型。由于默认的Parse方法不识别.作为时分分隔符,必须指定格式用精确解析方法实现转换。
2. 字符串转TimeSpan实现
使用TimeSpan.TryParseExact指定匹配格式,避免格式不匹配抛出异常:
string timeStr = "7.30"; // 格式说明:h匹配1-2位小时,\.转义匹配字面量点,mm匹配两位分钟 bool parseSuccess = TimeSpan.TryParseExact(timeStr, @"h\.mm", CultureInfo.InvariantCulture, out TimeSpan timeResult); if (parseSuccess) { // 转换成功输出 07:30:00 Console.WriteLine(timeResult); }
如果字符串带秒数(比如"7.30.15"表示7点30分15秒),把格式修改为@"h\.mm\.ss"即可。
3. 字符串转DateTime实现
如果需要绑定具体日期,可以按以下方式转换:
string timeStr = "7.30"; bool parseSuccess = DateTime.TryParseExact(timeStr, "H.mm", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime dateResult); if (parseSuccess) { // 转换默认生成当年当月1日的时间,可手动替换为当天日期 dateResult = DateTime.Today.Add(dateResult.TimeOfDay); // 输出示例:2024/5/20 7:30:00 Console.WriteLine(dateResult); }
4. 两个时间差值计算
无论是TimeSpan还是DateTime类型,直接做减法即可得到时间差,结果为TimeSpan类型:
string timeStr1 = "7.30"; string timeStr2 = "18.45"; TimeSpan.TryParseExact(timeStr1, @"h\.mm", CultureInfo.InvariantCulture, out TimeSpan t1); TimeSpan.TryParseExact(timeStr2, @"h\.mm", CultureInfo.InvariantCulture, out TimeSpan t2); TimeSpan diff = t2 - t1; // 按需读取差值属性,示例输出:时间差:11.25小时,即11小时15分钟 Console.WriteLine($"时间差:{diff.TotalHours}小时,即{diff.Hours}小时{diff.Minutes}分钟");
注意事项
- 格式字符串中的
.必须加转义符\,否则会被识别为格式控制符而非字面量的点 - 如果是12小时制带AM/PM的格式,把格式符修改为
h\.mm tt,传入对应区域的CultureInfo即可正常解析 - 生产环境建议统一使用
TryParseExact系列方法,不要直接用Parse避免非法输入抛出异常
内容的提问来源于stack exchange,提问作者lahiru sathish
相关产品推荐
相关产品推荐

