2010-04-11 45 views
3

我收到的日期和時間從CSV文件C# - 正則表達式驗證日期和時間

The received Date format is YYYYMMDD (string) (there is no ":" ,"-","/" to 
separate Year month and date). 

The received time format is HH:MM (24 Hour clock). 

我對這兩個進行驗證,以便(例如)(一)000011990可能無效日期(二)77: 90可能是 因時間而失效。

的問題是,

正則表達式是合適的人選這樣做(或)是否有任何其他的方式來實現 呢?

+1

A *三*年數?錯字還是故意的? – Joey 2010-04-11 14:18:30

+0

對不起四位數年份 – user274364 2010-04-11 14:25:26

回答

9

您正在尋找DateTime.TryParseExact

string source = ...; 
DateTime date; 
if (!DateTime.TryParseExact(source, 
          "yyyyMMdd", 
          CultureInfo.InvariantCulture, 
          DateTimeStyles.None, 
          out date)) { 
    //Error! 
} 

您可以使用相同的代碼來驗證倍,格式字符串"HH:mm"

+2

+1我將該死的....爲什麼我沒見過,以前?感謝您指出了這一點 !! – 2010-04-11 14:20:08

+0

Opps!太棒了!非常感謝你 – user274364 2010-04-11 14:27:29

4

你最簡單的解決辦法是使用

DateTime output; 
if(!DateTime.TryParse(yourstring, out output)) 
{ 
    // string is not a valid DateTime format 
} 

DateTime.TryParse將嘗試將字符串轉換爲DateTime變量,但如果失敗則不會拋出異常 - 相反,如果字符串未被識別爲有效的DateTime,則返回false

+0

'ParseExact'可能是一個更好的選擇,不過,因爲格式事先已知和'TryParse'(如'Parse')嘗試任何'DateTime'可能認識可能會或可能不會是正確的事做。如果沒有像先前指定的日期格式 – Joey 2010-04-11 14:13:40

+0

好了,問題可能是沿»線條更是它的一個錯誤。«可能違反Postel的法律,雖然但在某些情況下'ParseExact'可能是最好還是隻接受單一有效表示。 (恕我直言,這應該永遠是ISO 8601,但是這可能只是我的扭曲,怪異的腦海:-)) – Joey 2010-04-11 14:17:18

+0

@Johannes羅塞爾:或見SLaks'的答案 - 用'TryParseExact',而不是僅僅的TryParse .... – 2010-04-11 14:20:36

1

可以使用的DateTime結構的TryParse方法之一。如果分析失敗,它們將返回錯誤。

另一種選擇是使用ParseExact方法,但對於那些需要指定一個格式提供。

+0

你可以通過'空'雖然是格式提供者。 – Joey 2010-04-11 14:11:54

+0

@Johannes羅塞爾 - 公平點:) – Oded 2010-04-11 14:13:02