.NET Framework 4.8 和 .NET 8 之间的日期格式月份缩写的行为不同

问题描述 投票:0回答:1

此代码在 .NET Framework 4.8 和 .NET5、6、7、8 之间的行为不同

Console.WriteLine("CurrentCulture is {0}.", CultureInfo.CurrentCulture.Name);
Console.WriteLine("CurrentUICulture is {0}.", CultureInfo.CurrentUICulture.Name);
var date = new DateTime(2020, 1, 15);
for (int i = 0; i < 12; i++)
{
    Console.Write("{0}    ", date.ToString("MMM"));
    Console.WriteLine("{0}", date.ToString("d-MMM-yyyy"));
    date = date.AddMonths(1);
}

在 .net Framework 4.8 中,输出是

CurrentCulture is en-AU.
CurrentUICulture is en-US.
Jan    15-Jan-2020
Feb    15-Feb-2020
Mar    15-Mar-2020
Apr    15-Apr-2020
May    15-May-2020
Jun    15-Jun-2020
Jul    15-Jul-2020
Aug    15-Aug-2020
Sep    15-Sep-2020
Oct    15-Oct-2020
Nov    15-Nov-2020
Dec    15-Dec-2020

在 .NET 5、6、7 和 8 中,我得到以下输出:

CurrentCulture is en-AU.
CurrentUICulture is en-US.
Jan    15-Jan-2020
Feb    15-Feb-2020
Mar    15-Mar-2020
Apr    15-Apr-2020
May    15-May-2020
Jun    15-June-2020
Jul    15-July-2020
Aug    15-Aug-2020
Sep    15-Sept-2020
Oct    15-Oct-2020
Nov    15-Nov-2020
Dec    15-Dec-2020

请注意 June 和 July & September 现在如何为我提供 4 个字母的缩写,但前提是日期格式字符串包含日期和年份。当我单独显示月份时,我在 .NET Fx 和 .NET Core 之间得到了相同的行为。

有人知道这是有意的吗?有没有办法在 .NET 4.8 和 .NET 8 之间获得一致的行为?

c# .net datetime string-formatting tostring
1个回答
0
投票

.NET 5 有一个重大更改 - 全球化 API 在 Windows 10 上使用 ICU 库:

从 .NET 5 开始,如果应用程序在 Windows 10 May 2019 Update 或更高版本上运行,.NET 库默认使用 ICU 全球化 API。

这影响了全球化 API 和文化敏感 API。

如果您切换回 NLS,您应该会得到输出。例如,将以下内容添加到 .csproj:

<ItemGroup>
  <RuntimeHostConfigurationOption Include="System.Globalization.UseNls" Value="true" />
</ItemGroup>

我猜名字来自ICU的这一部分

另请参阅:

© www.soinside.com 2019 - 2024. All rights reserved.