2012-02-17 66 views
4

我們正在創建一個應用程序,該應用程序將通過全球發貨,同時導入和導出不同格式的文件。不變文化

我們應該對這些標準文件使用不變文化。

然而,不變文化就像EN-US文化一樣,而不是真正提供標準的國際寫作方式。

這就是說,我想至少改變這種文化的日期格式。但是,下面的代碼只是拋出異常:

CultureInfo format = System.Globalization.CultureInfo.InvariantCulture; 
format.DateTimeFormat.FullDateTimePattern = "yyyy'-'MM'-'dd' 'HH':'mm':'ss"; 
return format; 

什麼將是有格式的任何類型的變量,但寫日期的國際方式的的IFormatProvider正確的方法是什麼?

+2

不變文化是爲了給你一種*一致的*表示數據的方式,它不是用來在半中立文化中顯示或表示數據。是的,我也覺得ISO 8601的日期在這方面會很棒(主要是因爲我無法讀懂奇怪的美國日期格式),但文化不變意味着它不會改變。永遠。 – Joey 2012-02-17 16:52:21

回答

7

不變的文化就是這樣,不變的。你不能改變它。

該文化適用於需要以跨文化移植方式保存數據的.NET應用程序。

它並不打算顯示用戶或應該關心此數據所採用的格式,應該在查看數據之前始終將其轉換爲其特定的文化。

至於你可以做什麼,如果你真的這DateTime格式是開始定義一種新的文化(如果你想可能是基於關閉不變文化)。

var myStandardCulture = (CultureInfo)System.Globalization.CultureInfo.InvariantCulture.Clone(); 
myStandardCulture.DateTimeFormat.FullDateTimePattern = "yyyy'-'MM'-'dd' 'HH':'mm':'ss"; 
return myStandardCulture; 

定義你自己的文化的缺點,就是內置到.NET等.NET應用程序,其試圖閱讀您的文件也需要被告知所有的新的文化規則,而不是僅僅接受InvariantCulture的規則

+0

謝謝,但是這段代碼會拋出一個異常,說DateTimeFormat不能改變,就像我在問 – Schiavini 2012-02-18 11:11:44

+0

@Schiavini你確定的那樣?測試應用程序工作得很好。我的代碼與你的代碼不一樣。 Clone()調用應該爲您提供一個CultureInfo,並將IsReadOnly設置爲「false」。 – MerickOWA 2012-02-18 14:55:02

+0

確實如此,Clone()解決了這個問題。由於滾動,我沒有看到它。接受答案和+1! – Schiavini 2012-02-21 09:49:57

1

真的沒有「標準」的寫作方式......這不是不變的文化意味着什麼。大多數格式方法的默認行爲是使用基本操作系統的文化設置,以最適合使用特定計算機的人的方式格式化日期,時間和數字......即在運行時。

嘗試進入開發計算機的控制面板並更改本地化設置。例如,在一些文化中,他們使用了。作爲千位分隔符和小數點分隔符。

強迫「一種國際」的做事方式會讓他們感到困惑,因爲他們不習慣每天都看到我們認爲的標準。

日期是混淆的另一個很好的例子,因爲在我們的國家,世界上許多地區的DD-MM-YYYY而不是MM-DD-YYYY標準化。

+6

實際上,就日期格式而言,ISO 8601(即YYYY-MM-DD)在全球大部分地區都具有相當的普遍性和可理解性,並且最重要的是:沒有歧義。 – Joey 2012-02-17 16:53:31

+2

,它可以更容易地進行分類。MM/DD/YY對於美國以外的任何人都非常困惑 – Schiavini 2012-02-18 11:10:58