2017-08-14 57 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

如果該應用程序返回那些格式化的日期,但您無法控制它,我認爲它不會幫助您 –