我有一个包含以下日期的平面文件:07/07/2003 12:18:20 PM
。
SSIS转换Output Column
设置为数据库timestamp [DT_DBTIMESTAMP]
。
我有以下方法:
public string DbDateTime(string input)
{
return DateTime.ParseExact(input, "M/d/yyyy h:mm:ss tt",
CultureInfo.InvariantCulture).ToString();
}
我需要这样的输出到数据库:
2003-07-07 12:18:00.000
但是,我一直收到错误:
字符串未被识别为有效的DateTime。
输出设置如下:
Row.OuputDateTimeColumn =
Convert.ToDateTime(DbDateTime(Row.InputDateTimeColumn));
我不想使用Derived Column
进行转换。
答案 0 :(得分:1)
您的格式错误。它与您的输入字符串不匹配。请改用MM/dd/yyyy h:mm:ss tt
格式。例如;
public string DbDateTime(string input)
{
return DateTime.ParseExact(input,
"MM/dd/yyyy h:mm:ss tt",
CultureInfo.InvariantCulture).
ToString("yyyy-MM-dd h:mm:ss.fff");
}
将指定的日期和时间字符串表示形式转换为它 DateTime等效使用指定的格式和特定于文化 格式信息。 字符串表示的格式必须匹配 完全符合指定的格式。
还要小心你的小时形态。 h
用于1
到12
,hh
用于01
到12
。如果您想使用 24小时格式,则需要使用H
或HH
格式。
有关更多信息,请查看;
答案 1 :(得分:1)
问题1:您为月份和日期字段提供了无效的自定义格式。
您的日期字符串中有两个固定数字,但您只提供一种数字格式,如下所示:
"M/d/yyyy h:mm:ss tt"
所以你需要将其替换如下:
如果您的DateString小时格式为00-12
"MM/dd/yyyy hh:mm:ss tt"
如果您的DateString小时格式为0-12
"MM/dd/yyyy h:mm:ss tt"
问题2:您希望以2003-07-07 12:18:00.000
的自定义格式返回日期字符串,我假设它的格式为yyyy-MM-dd h:mm:ss.ffff
。
注意:,因为Month
和Date
在您的示例中相同(07),如果我的假设错误,您需要相应地调整它们。
所以你需要在return语句中为ToString()
函数提供上面的自定义格式。
完整代码:
public string DbDateTime(string input)
{
return DateTime.ParseExact(input, "MM/dd/yyyy h:mm:ss tt",
CultureInfo.InvariantCulture).ToString("yyyy-MM-dd h:mm:ss.fff");
}
问题3:在将自定义DateFormat添加到数据库时,您需要先将其转换为DateTime,如下所示:
Row.OuputDateTimeColumn = DateTime.ParseExact(
DbDateTime(Row.InputDateTimeColumn),"yyyy-MM-dd h:mm:ss.fff"
CultureInfo.InvariantCulture);