2013-02-23 46 views
0

我在爲用戶找到正確的DateTimeFormatter時遇到了一些麻煩。WinRT - 如何根據用戶文化獲取正確的DateTimeFormatter

當日期轉換爲字符串,例如用

.ToString("D"); 

總是EN-US區域性在WinRT中使用。

我發現應該使用新的全球化應用。

例如

 var langs = Windows.System.UserProfile.GlobalizationPreferences.Languages; 

     var homeregion = Windows.System.UserProfile.GlobalizationPreferences.HomeGeographicRegion; 


      Windows.Globalization.DateTimeFormatting.DateTimeFormatter dtf = new DateTimeFormatter(homeregion); 

但HomeGeographicRegion的結果是不符合新DateTimeFormatter的格式要求

我也試過這個

var formatter = new Windows.Globalization.DateTimeFormatting.DateTimeFormatter(Windows.Globalization.DateTimeFormatting.YearFormat.Default, 
       Windows.Globalization.DateTimeFormatting.MonthFormat.Abbreviated, 
       Windows.Globalization.DateTimeFormatting.DayFormat.Default, 
       Windows.Globalization.DateTimeFormatting.DayOfWeekFormat.Default); 

       string result = formatter.Format(Date); 

但也只返回日期字符串以en-Us格式。

可以告訴我什麼是根據用戶的文化(這也通過uid自動用於資源本地化)獲取DateTimeFormatter的正確方法是什麼?

+1

'ToString(String)'使用「當前」文化。你是否在說,如果你改變爲en-us以外的東西,'ToString'仍然會格式化爲en-us? – 2013-02-23 17:51:28

+0

嗯我不改變它,但我希望文化是德DE,因爲ists德國電腦沒有任何額外的語言。但你的權利,文化是en-us。那麼爲什麼不會贏得尊重併爲之樹立文化呢?所以我需要以其他方式獲得用戶文化? – 2013-02-23 18:54:03

回答

3

單參數DateTimeFormatter constructor需要一個模板(類似「month.abbreviated day dayofweek」)。爲此提供區域將失敗並顯示無效參數。

對於Windows應用商店應用程序,如果通過提供Windows.Globalization.ApplicationLanguages.Languages property的值構造DateTimeFormatter,則不帶語言參數構造的DateTimeFormatters將等同於DateTimeFormatter。對於桌面應用程序,默認值是用戶區域設置。

請注意,應用程序語言是從用戶語言(您可以在Windows.System.UserProfile.GlobalizationPreferences.Languages中查詢)和聲明的應用程序清單語言(您可以在Windows.Globalization.ApplicationLanguages.ManifestLanguages上查詢)中解析出來的。

最後,ResolvedLanguage property將讓您看到DateTimeFormatter內部正在使用哪種語言。

根據我的經驗,當人們得到他們沒有想到的結果時,通常是因爲應用程序只支持單一語言,在這種情況下,無論用戶的偏好是什麼,應用程序語言都會是這樣。否則,請驗證您期望的語言是否位於用戶語言列表的頂部。

+0

這是缺少的一點。用戶lang是de-de和en-gb,但顯然只有en-us,所以應用程序文化是en-gb,這對我來說似乎合乎邏輯 – 2013-02-27 07:24:47

相關問題