2013-04-09 76 views
1

我想解析字符串到時間,字符串可以是「hh:mm tt」或「hh:mmtt」 「11:00 am」,「11:00 am」,「13 :00「」5:00 AM「」6:00 PM「,」6:00 pm「,」6:00:01 pm「等 我想知道如何正確解析它。我的想法是枚舉下面的所有格式。 但我覺得這很尷尬,必須有更好的辦法。謝謝解析各種格式化的字符串到時間

 DateTime ret = DateTime.MinValue; 
     DateTime.TryParse(timeStr, CURRENT_CULTURE_FORMATPROVIDER,Style1, out ret); 
     if(ret == DateTime.MinValue) 
     { 
      DateTime.TryParse(timeStr,CURRENT_CULTURE_FORMATPROVIDER,Style2, out ret); 
     } 
     if(ret == DateTime.MinValue) 
     { 
      DateTime.TryParse(timeStr,CURRENT_CULTURE_FORMATPROVIDER,Style3, out ret); 
     } 
     ... 
     return ret; 

回答

1

DateTime.TryParse似乎是你的問題。看看

string myTime = "5:00AM"; 
DateTime dt = DateTime.Now; 
DateTime.TryParse(ss, out dt); 
2

不是一個真正的答案,但不是擬合評論:拒絕不完全清楚,而不是潛在猜錯值。

雖然很容易猜測特定字符串表示的實際值是非常危險的路線。猜測價值錯誤的可能性是您接受的更多輸入「格式」。

如果來自某些計算機生成的數據源的數據 - 僅僅拒絕意外的數據可能是最佳選擇。考慮是否需要一些固定的着名文化不敏感格式作品(即ISO8601可選帶時區)

如果這些數據直接來自用戶,可能會立即拒絕數據並讓用戶更精確地重新輸入日期格式。如果可能的話 - 不要讓用戶選擇並強制特定的格式。

如果用戶錯誤地猜出了值(如果他們關心並且經常使用你的工具)將會學習以一種非常特殊的格式輸入值並且只有使用它的語言指令才能使用(比如「hours two spaces colon minutes,只在下午添加PM的值「)...

請注意,只有一些文化(以.Net的方式)有AM/PM指示符,所以請確保針對這些指示符測試您的代碼。

相關問題