2017-08-14 79 views
1

我有一些自动化的C#窗口服务上传文本数据库。 “文本”由我们无法控制的第三方应用程序生成。检测日期格式C#

我的问题是,该文本包含日期的列。 默认的日期格式是DD/MM/YY。但有些时候,我们得到MM/YY/DD

是否有识别或转换MM/YY/DD以DD/MM/YY任何取巧的方法。数据可能只包含三天,四天的日期。因此,我打算检查日期是否在三天或四天的宽容期内,它将被接受。其他明智的手动纠正它。 例如,

14/08/17 is accepted

08/17/14 is not accepted. Logic should convert this to 14/08/17

任何想法?

+0

太含糊,表现出一个例子,你有问题。你有一个想法,展示使用该想法的代码,然后告诉我们你卡在哪里或为什么这种方法不起作用。 –

+0

你问的是不可能的。如果输入的日期含糊不清,如“01/02/2017”?这是正确的方式,它是2月1日或错误的方式,并在1月2日? – DavidG

+0

恐怕这注定会失败。如果你得到01/02/17,那么它可能是2月1日或1月2日。除非您能*保证*获得日月数为13或更多的价值,否则您无法可靠地做到这一点。 –

回答

2

你可以尝试与良好的格式解析,如果去确定有没有问题,它会返回日期。如果出现问题,请尝试使用“辅助格式”进行解析。如果一切顺利,它会返回日期。

注意,如果解析日期是提前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 

如果空被退回,你就会有一个无效的日期,如果没有,那将是解析日期

+0

@Dle仅供参考。第三方应用程序是VB 6应用程序。如果我检查VB6采用的默认日期格式,它会给出一些灯光吗? – Rauf

+0

如果该应用程序返回那些格式化的日期,但您无法控制它,我认为它不会帮助您 –