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

C# ParseExact解析日期失败求助:SSIS中转换特定格式日期

问题分析

你的代码转换失败的核心原因是输入字符串里的秒数是67,而DateTime类型要求秒的取值范围必须是0-59,ParseExact默认会严格校验时间分量的有效性,遇到超出范围的值就会抛出FormatException。

解决方案

根据你的场景,有两种处理思路:

思路1:修正源数据(优先推荐)

如果可以修改文件里的日期数据,把秒数调整到0-59的有效范围内,这样原来的代码只需要保留正确的格式字符串就能正常运行:

string strDate = "Oct 9 2017 2:45:07:145PM"; // 修正67为07
DateTime dtTroubleDate;
dtTroubleDate = DateTime.ParseExact(strDate, "MMM d yyyy h:mm:ss:ffftt", CultureInfo.InvariantCulture);
MessageBox.Show("dtTroubleDate String : " + dtTroubleDate.ToString());

思路2:手动处理无效时间分量(无法修改源数据时)

如果没办法修改文件内容,我们可以先拆分字符串,把超出范围的秒数转换为分钟和剩余秒数,再重新拼接成有效的日期字符串后解析:

string strDate = "Oct 9 2017 2:45:67:145PM";
// 拆分日期字符串获取各个部分
var parts = strDate.Split(new[] {' ', ':'}, StringSplitOptions.RemoveEmptyEntries);

// 提取时间分量并转换为数值
int hours = int.Parse(parts[3]);
int minutes = int.Parse(parts[4]);
int seconds = int.Parse(parts[5]);
int milliseconds = int.Parse(parts[6]);
string amPm = parts[7];

// 处理超出范围的秒数:67秒 = 1分钟 + 7秒
minutes += seconds / 60;
seconds = seconds % 60;
// 处理可能超出范围的分钟(比如如果秒数是120,分钟会加2,这里做冗余处理)
hours += minutes / 60;
minutes = minutes % 60;

// 转换12小时制为24小时制
if (amPm.Equals("PM", StringComparison.OrdinalIgnoreCase) && hours != 12)
{
    hours += 12;
}
else if (amPm.Equals("AM", StringComparison.OrdinalIgnoreCase) && hours == 12)
{
    hours = 0;
}

// 重新拼接成符合规则的日期字符串
string validDateStr = $"{parts[0]} {parts[1]} {parts[2]} {hours:D2}:{minutes:D2}:{seconds:D2}:{milliseconds:D3}";

// 解析修正后的字符串
DateTime dtTroubleDate;
if (DateTime.TryParseExact(validDateStr, "MMM d yyyy HH:mm:ss:fff", CultureInfo.InvariantCulture, DateTimeStyles.None, out dtTroubleDate))
{
    MessageBox.Show("dtTroubleDate String : " + dtTroubleDate.ToString());
}
else
{
    MessageBox.Show("Failed to parse the date after correction.");
}

这段代码会把2:45:67:145PM转换为14:46:07.145(因为PM的2点加12小时是14点,67秒转成1分钟7秒,所以45+1=46分钟),最终得到有效的DateTime对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:08:12