0

我在使用我正在构建的 SSIS 包中的脚本任务中的 DateTime.TryParseExact 方法验证 C# 中的日期时遇到问题。

我正在做的是使用 Split 方法去除包含日期的文件名的一部分,然后将文件名的日期部分传递给名为“FileDate”的本地字符串变量。然后我使用 DateTime.TryParseExact 验证该变量值,然后如果它很好,我将值传递给 SSIS 包级别变量。

例如,如果一个文件名为“filename_11-01-2013.txt”,我在“_”上拆分并在 FileDate 变量中保留“11-01-2013”​​。我正在工作的那部分已经验证了我的变量被正确填充。

我已确定我已声明“使用 System.Globalization;” 在我的脚本任务的顶部。

这是我的代码:

DateTime myDate;
if (DateTime.TryParseExact(FileDate, DateFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out myDate) == true)
{
    Dts.Variables["FileDate"].Value = FileDate;
    Dts.TaskResult = (int)ScriptResults.Success;
}
else
{
    Dts.TaskResult = (int)ScriptResults.Failure;
}

问题是它让糟糕的约会过去了。例如,它允许“55-01-2013”​​,这显然是一个糟糕的日期。

值得一提的是,以防万一这会影响潜在的答案,我可以控制文件最终将如何命名。任何帮助将不胜感激!

4

2 回答 2

2

确保您的格式字符串是MM-dd-yyyy而不是mm-dd-yyyy.

根据此页面,MM = 月,从 01 到 12,mm = 分钟,从 00 到 59。

于 2013-11-01T13:05:58.270 回答
0

您可能应该使用您期望的确切日期格式;我假设它是“dd-MM-yyyy”。'd'、'g' 等内置日期格式可能不适合您的场景。

//const string FileDate = "05-01-2013";       // Success
//const string FileDate = "5-01-2013";       // Fail
//const string FileDate = "05-1-2013";       // Fail
//const string FileDate = "05-01-13";       // Fail
const string FileDate = "05/01/2013";       // Fail
const string DateFormat = "dd-MM-yyyy";
DateTime myDate;
if (DateTime.TryParseExact(FileDate, DateFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out myDate) == true)
{
    result = "success";
}
else
{
    result = "fail";
}
于 2013-11-01T13:01:25.230 回答