.NET6中的Datetime.ToString在月份缩写后添加了一个点号

4

我有一个简单的C#代码示例,它创建了一个发票的文件名:

var x = new DateTime(2022,8,26);
var invoiceNumber = 1100;

var fileName = "CustomerX-Invoice";
    fileName += $"-{invoiceNumber}";
    fileName += $"-{x.ToString("dd-MMM-yyyy", CultureInfo.GetCultureInfo("nl-NL"))}";

Console.WriteLine(fileName);

这在.NET Core 3.1中运行得很好。它返回一个文件名为'CustomerX-Invoice-1100-26-aug-2022'。

迁移到.NET6后,它突然在月份的缩写后面添加了一个点。现在返回的是'CustomerX-Invoice-1100-26-aug.-2022'。请注意'aug'后面的点。

当我在LINQPad7中测试时,我发现问题已经在.NET5中引入。我无法确定这是设计上的问题还是已知的错误?这可能也与区域设置'nl-NL'有关吗?例如,如果我将其更改为'en-US',则不会在月份缩写后添加点。

使用.NET Core 3.1的Linqpad示例: 在.NET Core 3.1中工作正常

使用.NET6的Linqpad示例:

In .NET6 a dot is added

当然,我可以操作字符串并去掉点,但我更希望能够相信.NET会返回没有点的月份缩写。
对于这里发生的情况以及如何最好地处理它,有什么建议吗?

1
这可能与以下内容有关:https://dev59.com/T8Lra4cB1Zd3GeqPFD5K - johey
我刚刚测试了 CultureInfo.GetCultureInfo("en-US"))}";,没问题。 - ShadyOverflow
这是您的CultureInfo的产品,您是否需要使用它? - Austin C
我们需要使用荷兰的缩写,因此使用'en-US'或InvariantCulture对我们没有帮助。字符串操作非常丑陋。但这是否意味着随着.NET5的引入,他们决定为nl-NL特定文化添加一个点呢? - Stackberg
.NET 6做得对:https://en.wikipedia.org/wiki/Date_and_time_notation_in_the_Netherlands - tymtam
1个回答

3
这是由于nl-NL文化格式规则造成的。您需要更改或删除您的文化目标,或进行一些基本字符串操作以删除“。”。
如果这是用于程序内部使用并且不向用户显示,则可以使用CultureInfo.InvariantCulture每次获得一致的输出而无需进行任何本地化。我建议在所有后端工作中使用此Culture。
var x = new DateTime(2022, 8, 26);
var invoiceNumber = 1100;

var fileName = "CustomerX-Invoice";
fileName += $"-{invoiceNumber}";
fileName += $"-{x.ToString("dd-MMM-yyyy", CultureInfo.InvariantCulture)}";

Console.WriteLine(fileName);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接