如何根据Windows Phone 8.1上的系统区域格式格式化日期/时间值?

时间:2015-02-22 15:12:28

标签: c# .net localization windows-phone windows-phone-8.1

我在C#/ XAML上开发Windows Phone 8.1应用程序,我需要根据用户的区域格式首选项格式化时间值列表。例如,对于此图片的设置,我必须使用葡萄牙语(巴西)的格式格式化时间值。 Windows Phone region settings

问题是,日期/时间API根据应用程序的语言/区域格式化时间和日期。因为我的应用程序有一个" en-US"资源文件和系统语言设置为英语,API选择" en-US"作为我应用程序的语言,根据这种文化格式化所有内容。

有没有办法覆盖此行为并使用系统设置中用户定义的区域格式?

我能找到的最接近的是Windows.System.UserProfile.GlobalizationPreferences.Clocks,它是用户首选的时钟列表。但它只返回一个字符串,其值为" 24HourClock",没有格式模式或任何东西。

2 个答案:

答案 0 :(得分:0)

试试这个:

CultureInfo ci = new CultureInfo("pt-BR");
DateTime dt = DateTime.Now;
String strDate = dt.ToString("D", ci);
String strTime = dt.ToString("t", ci);
String strCurr = ci.NumberFormat.CurrencySymbol;

要获取当前文化的CultureInfo,请尝试:

CultureInfo ci = CultureInfo.CurrentUICulture;

要获取当前区域的CultureInfo,请尝试:

CultureInfo ci = new CultureInfo(Globalization.RegionInfo.CurrentRegion.Name);

答案 1 :(得分:0)

区域格式在Windows Phone Silverlight堆栈中的行为正确(恕我直言),但在WinRT堆栈中行为不正常(仍然是恕我直言)。自Windows 8.0以来一直行为不端,这里有关于这个问题的冗长讨论:WinRT apps and Regional settings. The correct way to format dates and numbers based on the user's regional settings?

此外,我在这里发表了一篇关于此问题的博客文章:http://mikaelkoskinen.net/winrt-xaml-misbehave-still-in-windows-81/

博客文章还包含一个似乎正常的解决方法:您可以将 Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride 设置为用户的区域格式,以使工作更好。

所以,希望App.xaml.cs的构造函数中的以下代码证明是有用的:

    public App()
    {
        Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = Windows.System.UserProfile.GlobalizationPreferences.HomeGeographicRegion;
        this.InitializeComponent();
        this.Suspending += this.OnSuspending;
    }

已使用替代版本

进行了更新

另一种方法是使用GlobalizationPreferences.Languages-array。例如:

        Windows.Globalization.ApplicationLanguages.PrimaryLanguageOverride = Windows.System.UserProfile.GlobalizationPreferences.Languages[1];

请确保检查阵列中确实存在多种语言。

这是设置PrimaryLanguageOverride之后在应用中的显示方式:

            this.DateText.Text = DateTime.Now.ToString("D");

Output with PrimaryLanguageOverride

更新了屏幕截图

在Windows Phone 8.1中,如果您通过“设置”更改“区域”格式,则会选择所选的“区域”格式作为第二种语言。至少这是8.1仿真器的工作原理。因此,当我从头开始创建模拟器并更改区域设置时:

WP 8.1 regional setting

然后,如果我重新启动手机,则所选区域已添加为第二语言:

Second language WP 8.1

现在Windows.System.UserProfile.GlobalizationPreferences.Languages包含我选择的Region格式。