2013-09-25 131 views
-1

我的程序必須能夠比較我們的風格和我們的風格格式,但我們的風格(mm/dd/yyyy) vs非美式(dd/mm/yyyy)。怎麼做?到目前爲止,這是我和它僅適用於比較相同的風格:美國和非美國日期時間格式

DateTime my_dt = new DateTime(); // this can be mm/dd or dd/mm 
           // depending on where it run 
DateTime new_dt = Convert.ToDateTime(us_dt); 
int compare = DateTime.Compare(new_dt, my_dt); 

時my_dt是DD/MM,我得到了錯誤:

System.FormatException: String was not recognized as a valid DateTime. 
    at System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles) 
    at update.Program.Process(String ftp_path, String action) 
+5

爲什麼每個新程序員總是使用'Convert.ToSomthing('而不是'Somthing.Parse('方法?) –

+1

是你的問題「如何解析DateTime,當我知道文化的字符串(並且它不是當前的應用文化)「? –

+3

樣式在解析過程中使用,而不是比較 – Kubik

回答

1

比較DateTime對象並不是真正的問題,它是解析。鑑於你在這裏2名嚴格的格式,即dd/mm/yyyymm/dd/yyyy以下應該工作

DateTime my_dt = null; 
// parse in either US/Non-US format (culture-independant) 
DateTime.ParseExact(someDateStr, new[] { "dd/MM/yyyy", "MM/dd/yyyy" }, CultureInfo.InvariantCulture, DateTimeStyles.None out my_dt); 
// parse in US format (culture-dependant) 
DateTime dt = DateTime.Parse(result3, new CultureInfo("en-US")); 
// compare the results 
int compare = DateTime.Compare(my_dt, result3); 
+0

我正在使用.NET3.5 –

+0

@JohnRyann此代碼將運行於.NET 2.0以上的所有內容中。 – James

+0

System.FormatException:String was未被識別爲有效的日期時間。 at System.DateTimeParse.Parse(String s,DateTimeFormatInfo dtfi,DateTimeStyles樣式) at update.Program.Process(String ftp_path,String action) –

1

格式爲datetime字符串表示的屬性,即dt.ToString("mm/dd/yyyy")

System.DateTime格式是不可知的,獨立的和不知道的。所以你可以比較它的任何兩個假設。

0

你的問題並沒有真正說明什麼,我認爲是你的實際問題。我猜你有兩種不同的文化格式的日期字符串,你想比較它們。

首先,你需要知道文化或字符串的格式,否則你可能會有不可預測的結果。

文化可以由LCID識別。你可以找到一個列表here

因此,讓我們假設你有一個英語(美國)日期字符串和英語(加拿大)的字符串,你可以像這樣對它們進行比較:

string americanDateString = "12/31/2013"; 
string canadianDateString = "31/12/2013"; 

DateTime americanDate = DateTime.Parse(americanDateString, System.Globalization.CultureInfo.GetCultureInfo(1033); // 1033 = English - United States culture code 

DateTime canadianDate = DateTime.Parse(canadianDateString, System.Globalization.CultureInfo.GetCultureInfo(4105); // 4105= English - Canada culture code 

int compare = DateTime.Compare(americanDate, canadianDate); 

編輯:您還可以使用區域設置的短字符串(例如「en-US」或「en-CA」)按照abatishchev的回答查找CultureInfo。

+0

「*首先,您需要知道字符串的文化*」 - 不是真的,所有你需要的是格式。一旦你有了,並且當然是一致的,你可以用文化*獨立*的方式進行解析。 – James

+0

@詹姆斯如果你可以假定所有的日期都是相同的格式,那麼這是真的。雖然如果遇到格式不同的日期,例如「2013年12月31日」,那麼ParseExact將會失敗。 –

+0

是的,因此評論「*,它當然是一致的*」:)它真正歸結爲你想要與你的數據有多靈活。對我而言,最好保持一致,所以選擇一種格式並堅持下來(通常UTC效果最好)。 – James

相關問題