使用DateTime.ToString("tt")时,Windows 10中的时间输出(AM/PM)发生了变化

Bit*_*der 14 c# datetime datetime-format windows-10

我最近升级到Windows 10 - 我现在看到使用"tt"格式说明符时日期输出中出现了一些意外的变化.

以下是一些演示此问题的代码:

using System.IO;
using System;
using System.Globalization;
using System.Threading.Tasks;

class Program
{
    static void Main()
    {
        var cultures = new string[] {null, "en-NZ", "en-US", "en-AU", "en-GB"};

            foreach (var culture in cultures) {
                if (culture != null) {
                    var c = CultureInfo.GetCultureInfo(culture);
                    System.Threading.Thread.CurrentThread.CurrentCulture = System.Threading.Thread.CurrentThread.CurrentUICulture = c;
                }

                DateTime dt = new DateTime(2015, 1, 2, 3, 4, 5, DateTimeKind.Utc);

                Console.WriteLine("selection: {0} CurrentThread.CurrentCulture.Name: {1} CurrentThread.CurrentUICulture.Name: {2}  Value: {3}",
                    culture ?? "ambient",
                    System.Threading.Thread.CurrentThread.CurrentCulture.Name,
                    System.Threading.Thread.CurrentThread.CurrentUICulture.Name,
                    dt.ToString("hhh:mm tt"));
            }
    }
}
Run Code Online (Sandbox Code Playgroud)

以前版本的Windows中的输出是:

selection: ambient CurrentThread.CurrentCulture.Name: en-NZ CurrentThread.CurrentUICulture.Name: en-NZ Value: 03:04 a.m.
selection: en-NZ CurrentThread.CurrentCulture.Name: en-NZ CurrentThread.CurrentUICulture.Name: en-NZ Value: 03:04 a.m.
selection: en-US CurrentThread.CurrentCulture.Name: en-US CurrentThread.CurrentUICulture.Name: en-US Value: 03:04 AM
selection: en-AU CurrentThread.CurrentCulture.Name: en-AU CurrentThread.CurrentUICulture.Name: en-AU Value: 03:04 AM
selection: en-GB CurrentThread.CurrentCulture.Name: en-GB CurrentThread.CurrentUICulture.Name: en-GB Value: 03:04 am
Run Code Online (Sandbox Code Playgroud)

在Windows 10中:

selection: ambient (windows 10) CurrentThread.CurrentCulture.Name: en-NZ CurrentThread.CurrentUICulture.Name: en-US  Value: 03:04 a.m.
selection: en-NZ CurrentThread.CurrentCulture.Name: en-NZ CurrentThread.CurrentUICulture.Name: en-NZ  Value: 03:04 AM
selection: en-US CurrentThread.CurrentCulture.Name: en-US CurrentThread.CurrentUICulture.Name: en-US  Value: 03:04 AM
selection: en-AU CurrentThread.CurrentCulture.Name: en-AU CurrentThread.CurrentUICulture.Name: en-AU  Value: 03:04 AM
selection: en-GB CurrentThread.CurrentCulture.Name: en-GB CurrentThread.CurrentUICulture.Name: en-GB  Value: 03:04 AM
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,此代码都是针对.Net Framework 4.5的Visual Studio 2013编译获胜

有谁知道为什么行为发生了变化 - 为什么在Windows 10中出现设置任何文化在一个线程上专门改变AM/PM的输出格式为"AM"/"PM"而不是通常输出的文化?

小智 6

你可能想看看"文化数据不应该被认为是稳定的" http://blogs.msdn.com/b/shawnste/archive/2005/04/05/405694.aspx

有一点是我们开始利用CLDR(通用语言环境数据存储库,http://cldr.unicode.org)来处理许多语言环境,以更好地符合行业标准.您可能已经注意到我们现在有很多其他语言环境可供使用.