使用SSIS脚本转换格式化日期和日期时间

时间:2014-02-23 17:13:39

标签: c# ssis

我有一个包含以下日期的平面文件: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进行转换。

2 个答案:

答案 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.ParseExact method

  

将指定的日期和时间字符串表示形式转换为它   DateTime等效使用指定的格式和特定​​于文化   格式信息。 字符串表示的格式必须匹配   完全符合指定的格式。

M适用于112,但MM适用于0112

d适用于131,但dd适用于0131

还要小心你的小时形态。 h用于112hh用于0112。如果您想使用 24小时格式,则需要使用HHH格式。

有关更多信息,请查看;

答案 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

注意:,因为MonthDate在您的示例中相同(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);