gpt4 book ai didi

c# - 为什么我的本地机器可能会错误地格式化国际日期?

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

这是一个奇怪的...

我刚刚看到一个(之前通过的)测试失败了,因为日期的字符串表示中有额外的空格。有问题的测试之前已在 CI 和我的本地机器上通过,但现在(在我的本地机器上)由于日期段之间的额外空格而失败。

以下 MCVE 表现出相同的行为:

using System;
using System.Globalization;

public class Program
{
public static void Main()
{
var date = new DateTime(2018, 01, 31);
var format = "d/M/yyyy";
var skSK = new CultureInfo("sk-SK");
Console.WriteLine(date.ToString(format, skSK));
}
}

在大多数地方(包括 .NET Fiddle)这会正确返回:

31.1.2018

但是在我的机器上,我现在得到:

31. 1. 2018

注意多余的空格!

我确信这在本周早些时候在我的本地 PC 上按预期工作,因为我使用带有此测试的项目作为使用覆盖工具进行一些实验的起点。当我今天下午恢复该实验时,由于新的失败测试,​​不再生成覆盖率文件。

我的 PC 上发生了什么变化会导致这种异常行为?

最佳答案

在 Windows 中(像许多其他系统一样),区域设置日期/时间格式的来源是 Unicode Common Locale Data Repository (CLDR) ,为软件开发人员和语言学家提供国际化和本地化支持。

有意义的用户的简短列表:

  • Microsoft (Windows, Office, Visual Studio etc.)
  • Apple (macOS, iOS, watchOS, tvOS, Apple Mobile Device Support and iTunes for Windows;
  • Google (Web Search, Chrome, Android, Adwords, Google+, Google Maps, Blogger, Google Analytics)
  • IBM (DB2, Lotus, Websphere, Tivoli, Rational, AIX, i/OS, z/OS)
  • Amazon

请参阅本地化的在线数据浏览器:Locale Explorer .

短日期格式,在 sk-SK 文化中本地化为 d。 M. yyyy,是这个文件中列出的那个。对于所有操作系统(Windows 7 到 Window 10)都是一样的。

MS Developer 相关博客:Locale Builder and Finnish or other locales.

Fiddler 或其他在线代码运行程序服务不是这方面比较的来源。
区域设置因系统而异。此外,这些国际格式会随着时间而变化,并取决于系统收到的更新(如果它收到这些更新的话)。

在 Windows 7 和 Windows 10 中,sk-SK 文化的默认短日期格式是 d。 M. yyyy.
但是如果格式列表被进一步解析,DateTime 模式不匹配。

string format = CultureInfo.CreateSpecificCulture("sk-SK")
.DateTimeFormat.GetAllDateTimePatterns()[1];

在 Windows 7 中,DateTimePatterns 列表中的第二个元素是 d.M.yyyy
在 Windows 10 中,同一索引处的元素是:dddd d。 MMMM yyyy

Windows 更新可能会更改任何语言环境的默认模式(无需明确通知)。
据了解,应用程序必须为特殊情况提供解析手段。或者在格式化时引用用户 Locale 设置,而不是试图强制内部使用特定模式。
日期/时间格式应该仅用于演示。 Locale 和用户设置 决定了该格式。系统的用户可能会决定使用与默认区域设置不同的格式。

此 GitHub 存储库包含 CLDR 数据库的更新 JSON:
CLDR Date Modern

API 国际化的 ECMAScript 引用也很有趣:
ECMAScript® 2017 Internationalization API Specification

MSDN 最新的全局化和本地化指南(UWP 相关):
Globalization and localization
Globalize your date/time/number formats
Use the Multilingual App Toolkit 4.0

关于c# - 为什么我的本地机器可能会错误地格式化国际日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53127994/

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