我知道日期/数字的文化规则对于整本书来说已经足够了,不过我想我有一个简单的问题..
使用 InvariantCulture 基本上是否意味着您明确定义值(日期/数字/其他)将被输入/显示为什么文化?它会覆盖任何其他文化设置(例如用户代理的设置)吗?
如果应用程序是为一种且只有一种文化的受众构建的,那么使用 InvariantCulture 并定义您希望每次如何输入/显示值是否有意义?
我知道日期/数字的文化规则对于整本书来说已经足够了,不过我想我有一个简单的问题..
使用 InvariantCulture 基本上是否意味着您明确定义值(日期/数字/其他)将被输入/显示为什么文化?它会覆盖任何其他文化设置(例如用户代理的设置)吗?
如果应用程序是为一种且只有一种文化的受众构建的,那么使用 InvariantCulture 并定义您希望每次如何输入/显示值是否有意义?
使用 InvariantCulture 基本上是否意味着您明确定义值(日期/数字/其他)将被输入/显示为什么文化?
不,这只是一种有点像美国英语的文化,除了货币符号之类的一些东西。它通常用于格式化/使用要理解或由另一台计算机而不是人类生成的文本。
如果应用程序是为一种且只有一种文化的受众构建的,那么使用 InvariantCulture 并定义您希望每次如何输入/显示值是否有意义?
不,您会使用与CultureInfo
该文化相关的内容。您还可以明确定义日期等的格式,但这是一个正交问题。最好为该文化使用一种预定义的标准格式,但如果这些格式都不符合您的需求,您可以始终明确。
InvariantCulture
独立于任何文化或任何因素。例如,如果您使用 new CultureInfo("en-US") 它将为您提供美国英语文化(这可能不是实际US English Culture
的,因为操作系统为您提供了在控制面板中更改这些设置的选项)它将返回修改后的文化版本如果应用了任何自定义格式,则为“en-US”。
换句话说InvariantCulture
,它将始终为您提供一种永远无法跨系统改变的文化。
考虑以下代码
Thread.CurrentThread.CurrentCulture = new CultureInfo("fr");
double source = 455.62d;
string serialized = source.ToString();//455,62 since `, is the decimal seperator` in "fr"
Thread t = new Thread((x) =>
{
double deserialized = double.Parse(((string)x));
Console.WriteLine(string.Format("Deserialized value is {0}", deserialized));//outputs 45562
});
t.CurrentCulture = new CultureInfo("en-US");
t.Start(serialized);
数字更重要对吧?考虑这个字符串表示AccountBalance
?
希望这可以帮助
关于. DateTime
_ _ _ (如果您碰巧知道您的输入格式与不变文化的格式匹配,您也可以使用它,但我通常会避免这种情况。)CultureInfo.InvariantCulture
ParseExact
ToString
Parse
与用户交互时不要使用不变的文化。
请记住,文化包含多个项目,包括日/月/年部分的顺序、日期和时间部分分隔符、字符编码以及一周中的日期、一年中的月份的特定语言名称, 以及包括 am/pm 在内的缩写。
何时应使用不变区域性的一些示例:
何时应使用特定文化的一些示例,例如en-US
: