不变的文化

时间:2012-02-17 16:44:55

标签: c# globalization cultureinfo

我们正在创建一个应用程序,该应用程序将在整个世界中发布,同时导入和导出不同格式的文件。

我们应该将Invariant Culture用于这些标准文件。

然而,不变文化就像EN-US文化一样,而不是真正提供标准的国际写作方式。

话虽这么说,我想至少改变这种文化的日期格式。但是下面的代码只会抛出异常:

CultureInfo format = System.Globalization.CultureInfo.InvariantCulture;
format.DateTimeFormat.FullDateTimePattern = "yyyy'-'MM'-'dd' 'HH':'mm':'ss";
return format;

使用IFormatProvider格式化任何类型变量的正确方法是什么,但是有一种编写日期的国际方式?

2 个答案:

答案 0 :(得分:7)

不变的文化就是这样,不变的。你无法改变它。

此文化适用于需要以跨文化可移植的方式保存数据的.NET应用程序。

不打算向用户显示或关注此数据所采用的格式,在查看数据之前,应始终将其转换为特定的文化。

如果你真的希望这个DateTime格式是开始定义一种新文化(如果你想要的话可​​能基于不变文化),你可以做什么。

var myStandardCulture = (CultureInfo)System.Globalization.CultureInfo.InvariantCulture.Clone();
myStandardCulture.DateTimeFormat.FullDateTimePattern = "yyyy'-'MM'-'dd' 'HH':'mm':'ss";
return myStandardCulture;

定义自己的文化的缺点是,其他尝试读取文件的.NET应用程序也需要告知所有新的文化规则,而不仅仅是接受.NET内置的InvariantCulture规则

答案 1 :(得分:1)

确实没有“标准”的写作方式......这不是Invariant文化的意思。大多数格式方法的默认行为是使用基本操作系统的文化设置,以最适合使用特定计算机的任何方式格式化日期,时间和数字......即在运行时。 / p>

尝试进入开发计算机上的控制面板并更改本地化设置。例如,在某些文化中他们使用。作为千位分隔符和小数分隔符。

强迫“一种国际”的做事方式会让他们感到困惑,因为他们不习惯每天看到我们认为标准的东西。

日期是另一个混​​乱的好例子,因为世界上许多地区都在DD-MM-YYYY而非MM-DD-YYYY标准化,就像我们国家一样。