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

使用C# CSVHelper读取CSV文件遇DateTime格式不识别错误如何解决

问题根因
  • 读取CSV报DateTime解析错误:CSVHelper读写时使用的日期格式化规则不统一,写入的日期字符串格式与读取时默认的解析规则不匹配,无法完成字符串到DateTime类型的转换。
  • 类型转换报错:Proddeets类中TimeTaken属性为DateTime类型,你在SetTimeTaken方法中尝试将字符串类型的值直接赋值给该属性,C#作为强类型语言不支持该隐式转换操作。
修复方案

方案1:配置CSVHelper统一日期规则(推荐)

直接在CSVHelper的读写配置中指定固定的DateTime格式,无需修改实体类结构,是适配CSV读写场景的最优方案。

写入CSV代码示例

// 引入必要命名空间
using CsvHelper;
using CsvHelper.Configuration;
using System.Globalization;
using System.IO;
using System.Collections.Generic;

// 全局配置,读写都用相同配置保证格式一致
var writeConfig = new CsvConfiguration(CultureInfo.InvariantCulture)
{
    HasHeaderRecord = true,
    DateTimeFormat = "dd-MM-yyyy" // 与你需要的日期格式保持一致
};

// 执行写入
using (var streamWriter = new StreamWriter("你的存储路径.csv"))
using (var csvWriter = new CsvWriter(streamWriter, writeConfig))
{
    List<Proddeets> data = GetYourData(); // 替换为你的业务数据获取逻辑
    csvWriter.WriteRecords(data);
}

读取CSV代码示例

var readConfig = new CsvConfiguration(CultureInfo.InvariantCulture)
{
    HasHeaderRecord = true,
    DateTimeFormat = "dd-MM-yyyy" // 和写入配置完全一致
};

using (var streamReader = new StreamReader("你的文件路径.csv"))
using (var csvReader = new CsvReader(streamReader, readConfig))
{
    List<Proddeets> result = csvReader.GetRecords<Proddeets>().ToList();
}

方案2:修改实体类的自定义赋值方法

如果你需要保留SetTimeTaken方法来设置默认时间,直接修正赋值逻辑即可,不需要做多余的字符串转换:

public class Proddeets {
    public string ProductArea { get; set; }
    public string Product { get; set; }
    // 可选:通过特性指定该属性的日期解析格式,无需额外配置CSVHelper
    [CsvHelper.Configuration.Attributes.Format("dd-MM-yyyy")]
    public DateTime TimeTaken{ get; set; }

    public void SetTimeTaken()
    {
        // 直接赋值DateTime类型的值,不需要转字符串
        TimeTaken = DateTime.Today;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:54:03