问题标签 [invariantculture]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 具有不同文化的 DateTime.TryParse
我有两个日期如下,并且我的当地文化是“en-IN”
如果我使用 Invariant Culture 运行以下代码,则日期将使用 enUSDate 进行解析。
要解决以下问题是我正在使用的代码,它正在解析每种文化的日期。
如果它仅因不变文化而失败,它将转到当前并且对于 UI 文化相同
所以想问一下这样做是否合适?或者有没有其他办法?
c# - C# 中开尔文符号 (K) 的 ToLowerInvariant 具有不同的结果
当我像这样定义开尔文符号(http://www.unicode-symbol.com/u/212A.html)时:
并做一个控制台写行:
我在一台 PC 上得到这个输出:
K - k=>ToLower=True - K=>ToLowerInvariant=False
在另一台电脑上我得到:
K - k=>ToLower=True - k=>ToLowerInvariant=True
这表明ToLowerInvariant()方法的工作方式不同?
笔记
- 在两个系统上
Thread.CurrentThread.CurrentCulture
和Thread.CurrentThread.UICurrentCulture
是相同的:"en-US"
- 两者都在运行net5.0
有效的更新
系统具有以下设置:
- 操作系统 =“Windows 10 专业版”
不工作的系统有以下设置:
- OS =“Windows Server 2019”(实际上这是来自 Azure 的构建代理)
c# - 如何强制 .Net ToString 使用给定的 Globalization / CultureInfo
我正在使用一个 .Net Core 6 库 (dll),其中除其他功能外,数字和日期/时间信息以字符串形式输出,并且此代码需要全球化,即。要有文化意识。图书馆是一个文档生成系统,所以在同一个应用程序会话中,用户会为 de-CH、de-FR、en-US 等生成文档。所以基本上,我们希望图书馆具有文化意识,但是输出的文化应该具有“标准”格式,而不是在操作系统级别或用户级别定制的格式。
例如对于十进制值,库代码使用这些方法来输出内容:
因此,不同用户在具有不同区域性设置的不同计算机中调用这些重载,将以不同方式格式化输出:小数分隔符可以是逗号或点,而千位分组分隔符可能是非制动空格或 ' 等。
但是,当provider
使用特定文化的实例显式传递参数时,例如“fr-CH”(瑞士-法语)和 CultureInfo.UseUserOverride == false,我期待始终相同的输出字符串,独立于用户和/或电脑。所以,我在想,.Net 对于所有文化类型的 CultureInfo-instances 的所有属性都有“内置”值,并且通过参数useUserOverride: false
我可以强制格式化使用这些“内置”值,因此会输出总是相同的字符串。
但这似乎并非如此!
编码:
此示例代码是使用 .Net Core 6 作为控制台应用程序编译的,我在 a) Windows 10 Pro PC 和 b) Windows Server 2012R2 上运行它,它们具有不同的输出。
- 法国-CH/Windows Pro 10 PC:-123 456 789 123 456,9877
- 法国-CH/Windows Server 2012R2:-123'456'789'123'456.9877
通过设置相同CultureInfo cultInfo = CultureInfo.InvariantCulture
:然后结果看起来总是相同的,这是预期的。
我也尝试设置Thread.CurrentThread.CurrentCulture
和Thread.CurrentThread.CurrentUICulture
使用cultInfo
上面的 -variable 然后调用ToString(format?, provider?)
,但没有效果:结果与没有设置CurrentThread
. PS。我实际上从这里、这里和这里了解到,设置Thread.CurrentThread.CurrentUICulture
与格式无关(我的情况),而是与翻译(resx 的东西)有关。
我知道有关-class的大量 Microsoft 文档CultureInfo
,但我无法从那里的森林中看到树。
我的问题如下:
- 任何版本的 .Net Core(或任何版本的 .Net Framework)是否有所有 CultureInfo 属性的“内置值”?
- 我怎么能强制我的代码始终完全使用与环境无关的文化给定的文化?
这对于能够以可靠的方式对库输出进行单元测试非常重要。
这可能很重要,当读回(使用 System.Convert(value, provider?) 任何用户在任何计算机上输出的值时(只知道它们输出的文化)。
c# - 带有小数点分隔符的值如何与 ToString 和 CultureInfo.InvariantCulture 设置一起用于非英语语言环境
我有一个简单的用例,我正在使用将德语设置为系统区域设置(区域格式为德语以及当前系统区域设置为德语)的系统。
例如
我原以为将 InvariantCulture 与 ToString 一起使用会产生一种文化中性格式,例如“0.123”,但它不会!