2017-08-14 7 views
1

データベースにテキストをアップロードするための自動化されたC#Windowsサービスがあります。 「テキスト」は、当社が何も支配していない第三者のアプリケーションによって生成されます。日付形式を検出するC#

私の問題は、テキストに日付の列が含まれていることです。 デフォルトの日付形式はDD/MM/YYです。 MM/YY/DDをDD/MM/YYに変換する方法はありますか?データには3日、4日間の日付しか含まれていない可能性があります。だから私は、日付が3日か4日で許容範囲内にあるかどうかを確認する予定です、それは受け入れられます。それ以外の場合は手動で修正してください。 例えば、

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日か間違ったラウンドで、2月1日ですか? – 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 

nullが返される場合は、無効な日付を持っていますされていない場合、それはあまりにも漠然とした解析された日付

+0

@Dle情報のみのため。サードパーティアプリケーションはVB 6アプリケーションです。私はVB6で撮影されたデフォルトの日付形式をチェックすると、それはいくつかの光を与えるのだろうか? – Rauf

+0

もしそのアプリがそれらの書式設定された日付を返し、あなたがそれを支配していなければ、私はそれがあなたを助けるとは思わない –