2012-05-17 107 views
6

我創建了一個C#WinForms應用程序。DateTime怪異行爲

在我的電腦了以下工作:

DateTime.ParseExact("13/05/2012", "dd/mm/yyyy", null) 

但這並不:

DateTime.Parse("13/05/2012") 

在我客戶的電腦它的逆轉。這工作:

DateTime.Parse("13/05/2012") 

但這並不:

DateTime.ParseExact("13/05/2012", "dd/mm/yyyy", null) 

的錯誤狀態:

String was not recognized as a valid DateTime. 

沒能找到有關這個問題在互聯網上的任何信息。該程序使用.Net Framework 4並且是一個x86應用程序。我運行Windows 8 x64,客戶端運行Windows 7 x64。

有沒有人有一個線索,爲什麼會發生這種情況?

謝謝。

+2

我會懷疑與系統的CultureInfo日期時間格式有關的差異,但請詳細說明「不起作用」的含義。它會產生錯誤嗎?什麼是錯誤信息? –

+1

@DanJ它適用於他,但在使用「ParseExact」方法時,它會在客戶端計算機上將其解析爲「05/13/2012」。我同意檢查CultureInfo。 – SimpleVar

+4

標準化ISO yyyy-MM-dd格式的另一個原因。 =) – MCattle

回答

12

你在不同計算機上獲得不同行爲的原因是因爲他們運行的文化不同。嘗試運行這行代碼兩者的計算機上,看它是否輸出不同的東西:(ideone)

System.Console.WriteLine(CultureInfo.CurrentCulture); 

輸出(例如):

 
en-US 

培養指定許多事情,其中​​之一是日期分隔符。如果你想爲所有用戶一致的行爲,嘗試指定文化:(ideone)

CultureInfo cultureInfo = CultureInfo.InvariantCulture; // or whatever you prefer 
DateTime dateTime = DateTime.ParseExact("13/05/2012", "dd/MM/yyyy", cultureInfo); 

上面的代碼假設你有這些using語句:

using System; 
using System.Globalization; 
+4

'mm'是分鐘,而不是幾個月,你正在尋找'MM'。如你的例子所示。 – Guvante

+0

@Guvante:謝謝,我修好了。 –

+0

工作就像一個魅力!非常感謝! –

11

要小心;在custom date and time format strings中,mm說明符表示「分鐘」,而不是「月」。您需要使用MM數月。

DateTime.ParseExact("13/05/2012", "dd/MM/yyyy", CultureInfo.InvariantCulture) 
+0

我對此不瞭解,謝謝! –