2010-10-15 123 views
2

我從文本文件獲取日期&時間 - 我的字符串var在我的C#程序。如何處理意外的日期和時間格式?

我需要將此字符串var轉換爲datetime var。

如何做到這一點,如果我得到意外類型的日期&時間?

如果我不知道主機上的區域類型(當我傳播我的程序)?

感謝的提前

+0

請制定一個精確的方案。 – SLaks 2010-10-15 14:48:15

+1

如果無法預測字符串所處的格式,則幾乎不可能將其正確轉換爲日期時間。 – Carvellis 2010-10-15 14:51:56

+0

http://stackoverflow.com/questions/3933548/可能重複和其他人 – 2010-10-15 18:25:41

回答

2

使用的TryParse將返回一個布爾說,如果日期是有效還是無效。

string dateString = "03/01/2009 10:00 AM"; 
    CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US"); 
    DateTimeStyles styles DateTimeStyles.None; 
    DateTime dateResult; 

    if(DateTime.TryParse(dateString, culture, styles, out dateResult)) 
    { 
     do something with dateResult 
    } 

TryParse docs

0

TryParse是你想要的。

DateTime result; 

if(!DateTime.TryParse(unpredictableDate, out result)) 
{ 
    throw new ArgumentException("Argument '" + unpredictableDate + "' was not a recognizable date format."); 
} 
+0

拒絕它與一個例外是好的。但是,你如何認爲「不良格式」是*更多*信息,那麼當你使用DateTime.Parse時會得到的異常? – 2010-10-15 14:58:22

+0

@Hans,因爲OP可以複製/粘貼我的代碼,而不是僅僅運行它,將它合併到一個更大的框架中,在那裏他可以根據自己的喜好定製錯誤消息。我修改了錯誤信息,使其更有幫助。如果您是批量處理,我會建議將錯誤記錄插入表中以便稍後手動處理,然後繼續批處理。 – Brad 2010-10-15 14:59:35

0

DateTime.Parse()使用運行應用程序的PC上的文化設置。這意味着用戶可以輸入他的文化的日期格式。

如果你不希望它這樣解析,然後一直被認爲英語文化設置時指定不變文化

0

如果您正在執行特定日期/時間格式,請嘗試使用DateTime.ParseExact

1

小心,2010年2月3日可能是mm/dd/yyyy或dd/mm/yyyy。如果你使用skyfoot的例子,你可能會得到一個有效的日期,但不是正確的日期!