C# - 尝试解析精确允许不良日期

时间:2013-11-01 12:47:25

标签: c# date datetime ssis

我在使用我正在构建的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”​​,这显然是一个糟糕的约会。

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

2 个答案:

答案 0 :(得分:2)

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

As per this page,MM =月,从01到12,mm =分钟,从00到59.

答案 1 :(得分: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";
}