You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Excel工作表字符串转为hh:mm时间格式?DateTime转换报错求助

问题解答:解析Excel时间字符串并写入新工作表

针对你提出的两个问题,我来一步步帮你解决:

问题1:解析Excel字符串为hh:mm时间并写入新工作表

核心要点是:Excel的时间本质是带日期的DateTime值(或代表一天比例的小数),所以你需要先把纯时分字符串转换为有效的DateTime/TimeSpan对象,再赋值给Excel单元格,同时设置单元格格式为hh:mm。

问题2:DateTime.Parse抛出FormatException的原因和解决

你遇到的异常是因为DateTime.Parse默认需要能解析为完整日期时间的字符串,如果你的in0只是类似"08:30"的纯时分格式,系统默认的解析规则可能无法识别(尤其是不同区域文化的格式差异)。以下是具体的修正方案:

步骤1:安全解析时间字符串

不要用DateTime.Parse,改用指定格式解析的方式,彻底避免文化差异导致的失败:

  • 如果你只需要时分,用DateTime.ParseExact指定"hh:mm"格式
  • 或者用TimeSpan.Parse解析为时间跨度,再结合基准日期生成DateTime

步骤2:修正你的代码

这里是修改后的完整代码,我标注了关键修改点:

// 记得引入必要的命名空间
using System.Globalization;

// 建议把DateandTime类的属性改成TimeSpan/DateTime类型,更贴合语义
public class DateandTime { 
    public TimeSpan In0 { get; set; } 
    public TimeSpan Out0 { get; set; } 
    // ... 其他属性同理修改
    public TimeSpan break_time { get; set; } 
}

// 处理Excel的循环逻辑
for (int row = 2; row <= rw; row++) { 
    // 你的cCnt循环范围是6-6,可以直接去掉内层循环,简化代码
    var in0Str = (string)(xlworkSheet.Cells[row, 7] as Excel.Range).Value; 
    if (string.IsNullOrWhiteSpace(in0Str))
    {
        // 处理空值,避免后续解析出错
        xlNewSheet.Cells[row, 7].Value = null;
        continue;
    }

    // 关键:指定格式解析时间字符串,避免FormatException
    if (TimeSpan.TryParseExact(in0Str, "hh:mm", CultureInfo.InvariantCulture, out TimeSpan in0Time))
    {
        // 把TimeSpan赋值给你的类(如果修改了属性类型)
        Time.In0 = in0Time;
        Console.WriteLine(Time.In0.ToString(@"hh\:mm"));

        // Excel需要DateTime类型,结合当天日期生成时间点
        DateTime dtnew = DateTime.Today.Add(in0Time);
        
        // 设置单元格格式并赋值
        Excel.Range formatRange = xlNewSheet.Cells[row, 7]; 
        formatRange.NumberFormat = "hh:mm"; 
        // 赋值DateTime对象,而不是原字符串,这样Excel才会识别为时间
        formatRange.Value = dtnew; 
    }
    else
    {
        // 处理解析失败的情况,比如日志提示或者标记错误
        Console.WriteLine($"无法解析时间字符串:{in0Str}");
        xlNewSheet.Cells[row, 7].Value = "无效时间";
    }
}

关键修改说明:

  1. 类型优化:把DateandTime类的字符串属性改成TimeSpan,更贴合时间跨度的语义,避免存储原始字符串带来的解析问题
  2. 安全解析:用TimeSpan.TryParseExact代替DateTime.Parse,指定格式和不变文化,彻底避免格式异常,同时还能处理解析失败的情况
  3. Excel赋值正确类型:给Excel单元格赋值DateTime对象(而不是字符串),这样设置NumberFormat="hh:mm"后,Excel会正确识别为时间类型,而非文本
  4. 空值处理:增加了空值判断,避免空字符串导致的解析错误

额外提示

  • 如果你的时间字符串是24小时制(比如"14:30"),记得把解析格式改成"HH:mm"
  • 如果你不需要日期部分,直接赋值TimeSpan给Excel单元格也可以,但Excel会自动把它转换为当天的时间(因为Excel的时间存储是从1900-01-01开始的小数)

内容的提问来源于stack exchange,提问作者Gerald

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:07:55