gpt4 book ai didi

c# - The Short Date ("d") Format Specifier does not print year with 4 digits in .NET Core on MacOS

转载 作者:太空宇宙 更新时间:2023-11-03 20:49:29 25 4
gpt4 key购买 nike

我想打印一个 4 位数年份的日期。根据 MS 文档,这应该非常简单。但是

    static void Main(string[] args)
{
var sample = new DateTime(2050, 1, 1);
var datestr = sample.ToString("d", CultureInfo.GetCultureInfo("de"));
Console.WriteLine(datestr);
}

打印 01.01.50,而不是 01.01.2050。为什么?这是 Mac 上的 .Net Core 2.1。另见 https://dotnetfiddle.net/4ZSbOJ

最佳答案

考虑到这种情况发生在 MacOS 上的答案

在深入了解源代码后,似乎在 Linux/MacOS 上 .NET Core 将使用 ICU对于日期和时间格式,在您的情况下,这会导致两位数的年份。有一个 issue通过拉取请求解决,以使年份格式跨平台一致。但是,据我所知,此更改仅计划包含在 .NET Core 3 中。


假设操作系统是 Windows 的错误答案

执行下面的代码

var sample = new DateTime(2050, 1, 1);
var datestr = sample.ToString("d", CultureInfo.GetCultureInfo("de"));
Console.WriteLine(datestr);

打印

01.01.2050

看来这个问题是你特有的。

但是,虽然您已指定您的文化是“de_DE”,但您的代码并未使用文化。当 ToString 调用中未指定区域性时,将使用 CultureInfo.CurrentCulture,因此我假设您已将 Windows 配置为使用德语区域格式。

Windows 允许您自定义区域格式,如果您这样做,.NET 将在使用 CultureInfo.CurrentCulture 时使用您修改后的格式。您可以在 Windows 设置应用中检查和修改格式:

  • 设置(Windows 键 + I)
  • 时间和语言
  • 地区
  • 更改数据格式

您可能会觉得这令人惊讶,而且关于 CultureInfo.CreateSpecificCulture 返回的文化还有一个更令人惊讶的事实,您可以在我对问题 When to use CultureInfo.GetCultureInfo(String) or CultureInfo.CreateSpecificCulture(String) 的回答中读到。 .

要避免 CultureInfo.CurrentCulture 的此功能(或怪癖),您可以在设置日期格式时显式指定 CultureInfo。但是,如果向用户显示此日期,则最好只使用 CultureInfo.CurrentCulture 以允许用户自由自定义格式。

关于c# - The Short Date ("d") Format Specifier does not print year with 4 digits in .NET Core on MacOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56871534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com