Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-尝试解析精确的错误日期_C#_Date_Datetime_Ssis - Fatal编程技术网

C#-尝试解析精确的错误日期

C#-尝试解析精确的错误日期,c#,date,datetime,ssis,C#,Date,Datetime,Ssis,在我正在构建的SSIS包中的脚本任务中使用DateTime.TryParseExact方法在C#中验证日期时遇到问题 我所做的是使用Split方法剥离包含日期的文件名的一部分,然后将文件名的日期部分传递到名为“FileDate”的本地字符串变量中。然后,我使用DateTime.TryParseExact验证该变量值,如果可以,我将该值传递给SSIS包级变量 例如,如果文件名为“filename_11-01-2013.txt”,我将在“_”上拆分,并在FileDate变量中保留“11-01-201

在我正在构建的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”,这显然是一个糟糕的日期


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

您可能应该使用您期望的确切日期格式;我假设是“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";
}

确保格式字符串是
MM dd yyyy
,而不是
MM dd yyyy


,MM=月,从01到12,MM=分钟,从00到59。

您的
DateFormat
?您的
myDate
值是多少?如果在分配中使用它,
Dts.Variables[“FileDate”]。Value=myDate这能解决问题吗?如果没有其他内容,请将文件命名为yyyy-mm-dd。默认情况下,它们将按名称升序排序。就是这样。。。最初,我的日期格式字符串是“mm dd yyyy”。我感到有点尴尬,但非常感谢你!别担心,这不太明显。此外,我还将遵循本帖中给出的其他建议,将文件名格式更改为ISO 8601(yyyy-MM-dd-hh:MM:ss)-这是一个好习惯,因为它可以避免任何文化歧义。