use*_*119 2 c# culture datetime cultureinfo
我知道日期/数字的文化规则对于整本书来说已经足够了,我想我有一个简单的问题.
使用InvariantCulture是否基本上意味着您明确定义将输入/显示的值(日期/数字/等)的文化?它会覆盖任何其他文化设置(例如用户代理的设置)?
如果应用程序是为一个且只有一种文化的受众构建的,那么使用InvariantCulture并定义每次输入/显示值的方式是否合理?
使用InvariantCulture是否基本上意味着您明确定义将输入/显示的值(日期/数字/等)的文化?
不,这只是一种有点像美国英语的文化,除了像货币符号这样的东西.它通常用于格式化/使用要被其他计算机而不是人类理解或生成的文本.
如果应用程序是为一个且只有一种文化的受众构建的,那么使用InvariantCulture并定义每次输入/显示值的方式是否合理?
不,你会使用相关CultureInfo
的文化.您可能还明确定义日期等格式,但这是一个正交关注.最好使用该文化的预定义标准格式之一,但如果没有一种满足您的需求,您可以始终明确.
InvariantCulture
是独立的任何文化或任何因素.例如,如果您正在使用新的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);
Run Code Online (Sandbox Code Playgroud)
数字更重要吗?考虑这个字符串表示AccountBalance
?
希望这可以帮助
具体到DateTime
,我能给的最好的建议是使用CultureInfo.InvariantCulture
了ParseExact
和ToString
当你心里有一个确切的格式。(Parse
如果您碰巧知道您的输入格式与不变文化的格式相匹配,您也可以使用它,但我通常会避免这种情况。)
与用户交互时不要使用固定区域性。
请记住,区域性包含多个项目,包括日/月/年部分的顺序、日期和时间部分分隔符、字符编码以及一周中的几天、一年中的几个月的特定语言名称,以及缩写,包括 am/pm。
何时应该使用不变区域性的一些示例:
何时应该使用特定文化的一些示例,例如en-US
:
归档时间: |
|
查看次数: |
3343 次 |
最近记录: |