2009-07-02 81 views
0

我有一種情況,我在數據庫中保存日期/數字等的字符串表示形式,並且由於應用程序在多個國家和有時與不同的用戶使用相同數據庫的國家/地區,我將CurrentCulture.Name存儲在數據庫中,以便在客戶端轉換時使用正確的區域性信息進行轉換。例如:new CultureInfo(string name)構造函數 - .NET(C#)

DateTime dt = Convert.ToDateTime(value,new CultureInfo(value.ClientCulture));

這很好,我的問題是,當調用新的CultureInfo(value.ClientCulture)時,它是從.NET Framework還是從Windows獲取CultureInfo?我擔心,如果從Windows調用,如果沒有安裝這些語言,可能會出現問題。如果從.NET Framework自己調用,那麼我看不出任何問題。

感謝

回答

-1

MSDN來看我假設構造函數將引發ArgumentException,因爲文化不機器上存在。

通過對CultureInfo class的快速閱讀,它看起來像一個CultureInfo對象被序列化爲只有一個名稱和UseUserOverride,這意味着有關文化的任何真實信息都存儲在Windows中,並依賴於名稱是正確的。

0

「我存儲在DB的CurrentCulture.Name與記錄,以便在客戶端轉換時」

我不認爲你應該保存文化信息與日期

如果您想要記住用戶的首選方式來顯示您可以考慮的日期,但是在大多數情況下,日期格式(顯示方式)取決於用戶的區域設置,即 。 (用戶必須能夠改變它們);

只要看看用戶的區域設置是什麼,你應該沒問題。

要回答你的問題:

是從CultureInfo.CurrentCulture屬性返回CultureInfo的實例是基於Windows®中區域選項中選擇的用戶(如圖1所示)的語言環境。這被稱爲程序員的「用戶區域設置」,以及Windows XP和Windows Server™2003中標準和格式的「語言」。

您不應該擔心已安裝的語言,因爲用戶的語言使用始終安裝! (同上選定的區域設置)

http://msdn.microsoft.com/en-us/magazine/cc163824.aspx

3

正確的答案是:不要儲存用戶特定日期時間字符串分貝!

如今每個db都有datetime類型,所以您必須使用當前用戶locale將字符串轉換爲datetime值,並將該值放入db(而不是字符串)中。

如果在某些奇怪的情況下,db不支持日期時間類型,或者可能還有其他一些要求(但是我不能發明一個),那麼您必須將日期時間轉換爲不變的日期時間字符串,並將該字符串置於D b。

BTW,用於高速化的原因,你應該使用,而不是創造新的CultureInfo實例GetCultureInfo方法:

DateTime dt = Convert.ToDateTime(value, CultureInfo.GetCultureInfo(value.ClientCulture)); 
+1

我有興趣瞭解更多關於使用`GetCultureInfo()的'性能優勢而不是創建一個`新的CultureInfo`實例。你能解釋一下嗎? – 2013-01-22 19:50:11