new CultureInfo(string Name)构造函数 - .NET(C#)

时间:2009-07-02 13:56:01

标签: c# cultureinfo

我有一种情况,我在数据库中保存日期/数字等的字符串表示,并且由于应用程序在多个国家/地区运行,有时在不同国家/地区的用户使用相同的数据库,我将CurrentCulture.Name存储在带有记录的数据库,以便在客户端转换时,它使用正确的文化信息进行转换。例如:

DateTime dt = Convert.ToDateTime(value,new CultureInfo(value.ClientCulture));

这很有效,我的问题是,在调用新的CultureInfo(value.ClientCulture)时,是从.NET Framework还是从Windows获取CultureInfo?我担心如果从Windows调用,如果没有安装这些语言,可能会出现问题。如果从.NET Framework自己调用,那么我认为没有问题。

由于

3 个答案:

答案 0 :(得分:3)

正确答案是:不要在db中存储用户特定的日期时间字符串!

现在每个db都有datetime类型,因此必须使用当前用户区域设置将字符串转换为datetime值,并将此值放在db(而不是string)中。

如果在某些奇怪的情况下,db不支持datetime类型,或者可能还有其他一些要求(但是我甚至不能创建一个),那么你必须将日期时间转换为不变的datetime字符串,并将此字符串放在db中

BTW,出于加速原因,您应该使用GetCultureInfo方法而不是创建新的CultureInfo实例:

DateTime dt = Convert.ToDateTime(value, CultureInfo.GetCultureInfo(value.ClientCulture));

答案 1 :(得分:0)

“我将带有记录的CurrentCulture.Name存储在DB中,以便在客户端进行转换时”

我认为您不应该使用日期

存储文化信息

如果您想记住用户首选的显示日期的方式,您可以考虑这个,

但是在大​​多数情况下,日期的格式(显示方式)取决于 用户的区域设置。 (用户必须能够更改它们);

只需查看用户的区域设置,您应该没问题。

回答你的问题:

CultureInfo.CurrentCulture属性返回的CultureInfo实例基于用户在Windows®区域选项中选择的区域设置(如图1所示)。这称为程序员的“用户区域设置”,以及Windows XP和Windows Server™2003中标准和格式的“语言”。

您不必担心已安装的语言,因为始终会安装用户使用的语言! (同上选择区域设置)

请参阅http://msdn.microsoft.com/en-us/magazine/cc163824.aspx

答案 2 :(得分:-1)

MSDN判断我假设构造函数将抛出ArgumentException,因为机器上不存在文化。

通过对CultureInfo class的快速阅读,看起来CultureInfo对象仅被序列化为Name和UseUserOverride,这意味着有关文化的任何真实信息都存储在Windows中并依赖于名称正确