[英]AbbreviatedMonthNames not working properly in .NET Core 3.1
我在 .NET Core 3.1 中遇到自定义 DateTime 问题。 据我所知,我的代码应该真的有效。 我没有做任何特别复杂的事情,只是设置了自定义月份名称。
我想要一种瑞典文化,并且要打印最后没有点的月份。
using System;
using System.Globalization;
namespace Playground.DateTime
{
public class Program
{
public static void Main(string[] args)
{
var culture = new CultureInfo("sv-SE")
{
DateTimeFormat =
{
AbbreviatedMonthNames = new [] { "jan", "feb", "mar" ,"apr", "maj", "jun", "jul", "aug", "sep", "okt", "nov", "dec", ""}
}
};
var today = new System.DateTime(2020, 01, 16);
Console.WriteLine($"Today date without culture set: {today.ToString("d MMM yyyy")}");
CultureInfo.DefaultThreadCurrentCulture = culture;
CultureInfo.DefaultThreadCurrentUICulture = culture;
Console.WriteLine($"Today date WITH culture set: {today.ToString("d MMM yyyy")}");
Console.ReadLine();
}
}
}
上面代码的输出是:
Today date without culture set: 16 Jan 2020
Today date WITH culture set: 16 jan. 2020
我希望它是(注意第二个输出上没有点):
Today date without culture set: 16 Jan 2020
Today date WITH culture set: 16 jan 2020
这是上述代码的 dotnetfiddle 。
关于发生了什么的任何想法? 谢谢!
我缺少的是设置另一个属性,即AbbreviatedMonthGenitiveNames
。 这是一个有效的 dotnet fiddle 。 如果您好奇,可以在这里阅读更多内容。
不确定,但我猜这种行为在 .NET Core 2.X 和 3.X 之间是不同的,因为我以前没有遇到过这个问题。 运行 .NET Core 2.2 已经有一段时间了,在升级到 .NET Core 3.1 时突然出现了这个问题。
更新
以前 CoreCLR ( https://github.com/dotnet/corefx/issues/2804 ) 中存在一个错误,该错误已在此 PR ( https://github.com/dotnet/coreclr/pull/26384 ) 中修复。 因此,现在您必须设置 Tarek 提到的AbbreviatedMonthGenitiveNames
。
我们在格式化所有格名称时报告了一个错误https://github.com/dotnet/corefx/issues/2804 (例如,当使用 d MMM 格式时)。 我们已修复此错误以正确使用属格月份名称而不仅仅是缩写月份名称。
您可以通过在代码段中添加第二行来修复您的代码:
AbbreviatedMonthNames = new [] { "jan", "feb", "mar" ,"apr", "maj", "jun", "jul", "aug", "sep", "okt", "nov", "dec", ""}
AbbreviatedMonthGenitiveNames = AbbreviatedMonthNames;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.