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

C#中转换Excel日期字符串为DateTime遇格式异常求助

解决Excel日期字符串转DateTime的格式异常问题

问题根源

  • 文化信息不匹配:你的日期字符串是西班牙语格式(Miercoles是西班牙语周三,Noviembre是西班牙语十一月),但代码里用了en-PY(巴拉圭英语)文化,无法识别西班牙语的日期词汇。
  • 格式字符串与目标字符串不匹配:原字符串里的分隔词是西班牙语的de,但你用了对应英文of的\o\f,导致格式解析失败。
  • 字符串截取方式不可靠:用固定长度Remove(dateString.Length-7)截取日期部分,一旦字符串长度变化(比如日期是个位数、时间格式不同)就会出错。

修正方案

1. 使用正确的西班牙语文化信息

替换CultureInfo.CreateSpecificCulture("en-PY")为西班牙语文化,比如es-PY(巴拉圭西班牙语)或es-ES(西班牙西班牙语),确保能识别西班牙语的星期和月份名称。

2. 调整格式字符串匹配西班牙语结构

原日期结构是"星期几, 日 de 月 de 年",所以格式字符串要写成"dddd, d 'de' MMMM 'de' yyyy",用单引号把de括起来作为字面量解析。

3. 可靠提取日期部分

改用Split或正则表达式提取日期部分,避免固定长度截取的风险:

  • 用Split按空格分割,取前7个元素拼接(因为原字符串最后两个是时间部分);
  • 或者用正则匹配@"^.*\d{4}"提取到年份为止的部分。

修正后的代码

dataSet = reader.AsDataSet();
DataTable dataTable = dataSet.Tables[0];
// 使用西班牙语文化信息
var esCulture = CultureInfo.CreateSpecificCulture("es-PY");
// 匹配西班牙语日期格式的格式字符串
string format = @"dddd, d 'de' MMMM 'de' yyyy";

foreach (DataRow fila in dataTable.Rows)
{
    string dateString = fila["Column18"].ToString().Trim();
    // 可靠提取日期部分:分割后取到年份的部分
    string[] parts = dateString.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries);
    if (parts.Length >= 6) // 确保有足够的部分组成日期
    {
        string datePart = string.Join(" ", parts.Take(6));
        if (DateTime.TryParseExact(datePart, format, esCulture, DateTimeStyles.None, out DateTime date))
        {
            Console.WriteLine(date);
        }
        else
        {
            Console.WriteLine($"无法解析日期: {dateString}");
        }
    }
}

额外说明

如果你的Excel里的日期实际上是可识别的日期格式(而非纯字符串),可以尝试设置AsDataSet的配置,让ExcelDataReader直接读取为DateTime类型,避免手动转换:

var config = new ExcelDataSetConfiguration()
{
    ConfigureDataTable = (_) => new ExcelDataTableConfiguration()
    {
        UseHeaderRow = true,
        ReadDateTimes = true // 直接读取日期类型
    }
};
dataSet = reader.AsDataSet(config);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:10:26