检测日期格式C#

检测日期格式C#,c#,validation,date,C#,Validation,Date,我有一些自动化的C#windows服务来将文本上传到数据库。“文本”是由我们没有任何控制权的第三方应用程序生成的 我的问题是文本包含一列日期。 默认日期格式为DD/MM/YY。但有时我们会得到MM/YY/DD 是否有任何棘手的方法来识别或转换MM/YY/DD到DD/MM/YY。数据可能只包含三、四天的日期。因此,我计划检查日期是否在三天或四天的公差范围内,它将被接受。另一方面,手动纠正它。 例如, 17年8月14日被接受 08/17/14不被接受。逻辑应将其转换为2017年8月14日 有什么想法

我有一些自动化的C#windows服务来将文本上传到数据库。“文本”是由我们没有任何控制权的第三方应用程序生成的

我的问题是文本包含一列日期。 默认日期格式为DD/MM/YY。但有时我们会得到MM/YY/DD

是否有任何棘手的方法来识别或转换MM/YY/DD到DD/MM/YY。数据可能只包含三、四天的日期。因此,我计划检查日期是否在三天或四天的公差范围内,它将被接受。另一方面,手动纠正它。 例如,

17年8月14日被接受

08/17/14不被接受。逻辑应将其转换为2017年8月14日


有什么想法吗?

您可以尝试使用良好的格式进行解析,如果没有问题,它将返回日期。如果出现错误,请使用“辅助格式”。如果一切顺利,它将返回日期

请注意,如果解析的日期比解析的日期提前3天以上,则该日期将不算作有效日期,并将返回null

if(DateTime.TryParseExact(input, "dd/MM/yy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dateValue)
{
     int daysBetween = (dateValue-DateTime.Now).Days
     if(daysBetween < 4)
     {
          return dateValue
     }
}
if(DateTime.TryParseExact(input, "MM/yy/dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out dateValue)
{
     int daysBetween = (dateValue-DateTime.Now).Days
     if(daysBetween < 4)
     {
          return dateValue;
     }
}
return null
if(DateTime.TryParseExact(输入,“dd/MM/yy”,CultureInfo.InvariantCulture,datetimestyle.None,out dateValue)
{
int daysBetween=(dateValue DateTime.Now).Days
如果(小于4之间的天数)
{
返回日期值
}
}
if(DateTime.TryParseExact(输入“MM/yy/dd”、CultureInfo.InvariantCulture、datetimestyle.None、out dateValue)
{
int daysBetween=(dateValue DateTime.Now).Days
如果(小于4之间的天数)
{
返回日期值;
}
}
返回空

如果返回null,您将有一个无效的日期,如果不是,那将是解析的日期

太模糊,请给出一个示例和您遇到的问题。您有一个想法,显示使用该想法的代码,然后告诉我们您遇到了什么问题或该方法不起作用的原因。您所问的实际上是不可能的。如果输入的日期不明确,例如
2017年2月1日
?这是正确的方向,是2月1日,还是错误的方向,是1月2日?恐怕这是注定要失败的。如果你得到2017年2月1日,那么可能是2月1日或1月2日。除非你能保证得到一个月的天数为13或更多的值,否则你将无法可靠地做到这一点。@JonSkeet哈哈,我们用的是同一个日期:)你的第二个例子也可能是2014年8月17日,你不能说这不被任何人接受logic@Dle仅供参考。第三方应用程序是VB6应用程序。如果我检查VB6采用的默认日期格式,它会发光吗?如果该应用程序返回这些格式化的日期,而您对其没有任何控制权,我认为它不会发光帮助你