2017-01-05 54 views
0

我總是覺得很難處理日期。他們的文化轉換格式等在這裏和那裏都會造成麻煩 雖然,Convert.ToDateTime,DateTime.Parse和DateTime.TryParse是直接的,最後一個是我最喜歡的,直到我偶然發現我的應用程序的問題,其中日期返回爲字符串和值不一致(有些從Day開始而其他月份)。當日期以'Month'開始時,DateTime.TryParse不起作用。 例如作爲本月第一次出現在字符串DateTime.TryPase(DateString有些以月份開始,其他則以日期開頭)

DateTime.TryParse("09/26/2011 14:45:00", out dtout) ? dtout : (DateTime?)null 

而下面的語句將被解析爲預期 下面的語句將返回null,因爲它有「日」出現的第一

DateTime.TryParse("12/03/2012 14:30:00", out dtout) ? dtout : (DateTime?)null 

我知道日期字符串操作不會尤其是當沒有人知道字符串是以什麼開頭的時候。有沒有辦法通過應用文化信息或我可以用來在TryParse之前對齊字符串格式?

+2

你怎麼知道日期時間字符串是從哪月開始的?如果兩者都可以成功解析,你會選擇一個隨機日期? –

+1

更好地使用'TryParseExact',因爲它可以讓你指定預期的字符串表示格式。 –

+0

我必須正確解析它們,並且必須以'dd/MM/yyyy'格式顯示 –

回答

4

好了,你可以使用DateTime.TryParseExact以允許格式string[]

string[] validDateTimeFormats = {"MM/dd/yyyy HH:mm:ss", "dd/MM/yyyy HH:mm:ss" }; 
DateTime dt; 
bool validDate1 = DateTime.TryParseExact("09/26/2011 14:45:00", validDateTimeFormats, CultureInfo.InvariantCulture, DateTimeStyles.None, out dt); 
bool validDate2 = DateTime.TryParseExact("12/03/2012 14:30:00", validDateTimeFormats, CultureInfo.InvariantCulture, DateTimeStyles.None, out dt); 

但是,這並不解決核心問題,你怎麼知道是什麼,如果這兩種格式可用於正確的日期解析日期。日期是從月份開始還是從當天開始?

例如:

bool validDate3 = DateTime.TryParseExact("01/05/2012 14:30:00", validDateTimeFormats, CultureInfo.InvariantCulture, DateTimeStyles.None, out dt); 

這將解析到1月5日(因爲格式是數組中的第一個),這似乎是正確的,但也有可能是5月1日。

+0

感謝蒂姆。目前我可以接受這種方法。在db級調查覈心問題。 –

相關問題