Windows 和 Linux 上的 .net 不同日期格式 (Ubuntu)

.net different date format on Windows and Linux (Ubuntu)

提问人:arael6 提问时间:4/29/2023 最后编辑:arael6 更新时间:5/2/2023 访问量:179

问:

以下代码的日期时间在 Windows 10 和 Linux (Ubuntu 22.04.2) 上看起来不同:

DateTime date1 = new DateTime(2001, 9, 1);
Console.WriteLine(date1.ToString());

Windows 日期时间格式:01.09.2001 00:00:00
Ubuntu 日期时间格式:09/01/2001 00:00:00

问:如何在 asp.net 应用程序中设置全局日期格式,而不管在运行应用程序的系统中设置的日期格式如何?

我尝试在 web.config 中设置区域性,但它没有帮助。

<system.web>
    <globalization  culture="pl-PL"  uiCulture="pl-PL"/>
</system.web>

我尝试在 Program.cs 中设置区域性,但它也没有帮助。

builder.Services.Configure<RequestLocalizationOptions>(options =>
{
    options.DefaultRequestCulture = new RequestCulture("pl-PL", "pl-PL");
    options.SupportedCultures = new[] { new CultureInfo("pl-PL", false) };
    options.SupportedUICultures = new[] { new CultureInfo("pl-PL", false) };
});

编辑:我更正了代码:

var app = builder.Build();

app.UseRequestLocalization(options =>
{
    options.DefaultRequestCulture = new RequestCulture("pl-PL", "pl-PL");
    options.SupportedCultures = new[] { new CultureInfo("pl-PL", false) };
    options.SupportedUICultures = new[] { new CultureInfo("pl-PL", false) };
});

应用上述修复程序后,日期格式与设置区域性兼容,但问题仍然存在,即尽管设置了区域性,但日期格式在 Windows 和 Linux 上仍然不同: Windows 日期时间格式:01.09.2001 00:00:00
Ubuntu 日期时间格式:1.09.2001 00:00:00

Ubuntu 在每月 1 到 9 的月初缺少零是正常的,还是一个错误?

asp.net .net date datetime-format

评论

0赞 Daniel A. White 4/29/2023
Web.config 不适用于 .net core
1赞 Steve 4/29/2023
调用生成应用后,你有应用吗?UserRequestLocalization(options) 行?
0赞 arael6 4/30/2023
更正代码:修复上述日期格式后仍然不同: Windows 日期时间格式:01.09.2001 00:00:00 Ubuntu 日期时间格式:1.09.2001 00:00:00 Ubuntu 在每月 1 到 9 的月初缺少零是正常的,还是错误?var app = builder.Build(); app.UseRequestLocalization(options => { options.DefaultRequestCulture = new RequestCulture("pl-PL", "pl-PL"); options.SupportedCultures = new[] { new CultureInfo("pl-PL", false) }; options.SupportedUICultures = new[] { new CultureInfo("pl-PL", false) }; });

答:

0赞 Gustav 4/29/2023 #1

尝试指定以下项的区域性信息:ToString

DateTime date1 = new DateTime(2001, 9, 1);
System.Globalization.CultureInfo cultureInfo = System.Globalization.CultureInfo.GetCultureInfo("pl-PL");
Console.WriteLine(date1.ToString(cultureInfo));

// Output:
// 01.09.2001 00:00:00

评论

0赞 arael6 5/1/2023
您的示例有效,但我想要一个全局设置,您不必为每个变量设置 cultureInfo 参数。
0赞 Gustav 5/1/2023
明白了。不知道如何实现这一点 - 而且我没有 Linux 可以测试。
0赞 arael6 5/2/2023 #2

根据 Windows 和 Linux 之间的日期格式差异中的信息,不同系统上使用的日期格式可能存在差异是正常的。如果我们希望日期格式独立于客户端的系统,我们应该从应用程序端处理它。