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

日期格式转换报错:未识别有效日期时间,寻求解决方案

问题解决:日期格式转换失败的修复方案

你的代码逻辑完全颠倒了,导致解析错误。原始日期字符串是08-13-2022 10:27 PM,要转成08/13/2022(推测你目标格式是月/日/年,原问题的08/12/2022可能是笔误),正确步骤应该是先解析原始字符串为DateTime对象,再格式化为目标字符串,而非反过来。

错误原因

你当前的代码先用String.Format("MM/dd/yyyy", row["POSTING_DATE"])处理原始字符串,但row["POSTING_DATE"]是08-13-2022 10:27 PM这个字符串,不是DateTime对象,所以String.Format根本无法生效,反而给DateTime.Parse传入了格式混乱的字符串,自然触发“未识别到有效的日期时间”错误。

正确代码实现

方案1:使用ParseExact强制指定解析格式(适合原始格式固定的场景)

// 1. 解析原始日期字符串,指定准确格式和不变文化(避免系统环境差异)
DateTime originalDate = DateTime.ParseExact(
    row["POSTING_DATE"].ToString(),
    "MM-dd-yyyy hh:mm tt",
    System.Globalization.CultureInfo.InvariantCulture
);
// 2. 格式化为目标字符串格式
row["POSTING_DATE"] = originalDate.ToString("MM/dd/yyyy", System.Globalization.CultureInfo.InvariantCulture);

方案2:使用TryParseExact做安全解析(避免异常崩溃)

如果原始数据可能存在格式不规范的情况,推荐用这个方案:

if (DateTime.TryParseExact(
    row["POSTING_DATE"].ToString(),
    "MM-dd-yyyy hh:mm tt",
    System.Globalization.CultureInfo.InvariantCulture,
    System.Globalization.DateTimeStyles.None,
    out DateTime originalDate
))
{
    row["POSTING_DATE"] = originalDate.ToString("MM/dd/yyyy", System.Globalization.CultureInfo.InvariantCulture);
}
else
{
    // 处理解析失败的情况,比如赋值默认值或记录日志
    row["POSTING_DATE"] = DBNull.Value;
}

关键说明

  • MM-dd-yyyy hh:mm tt是对应原始日期的格式:MM为两位月份,dd为两位日期,yyyy为四位年份,hh是12小时制小时,mm是分钟,tt是AM/PM标识。
  • CultureInfo.InvariantCulture确保解析和格式化过程不依赖系统默认区域设置,避免不同语言环境下的解析错误。
  • 如果你的目标格式是日/月/年(比如13/08/2022),只需把ToString的格式字符串改成"dd/MM/yyyy"即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 09:18:29