繁体   English   中英

新的CultureInfo(字符串名称)构造函数-.NET(C#)

[英]new CultureInfo(string Name) constructor - .NET (C#)

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

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

这很好用,我的问题是,在调用新的CultureInfo(value.ClientCulture)时,它是从.NET Framework还是从Windows获取CultureInfo? 我担心如果从Windows调用,如果没有安装这些语言,可能会出现问题。 如果从.NET Framework本身进行调用,那么我看不到任何问题。

谢谢

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

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

如果在某种奇怪的情况下,db不支持datetime类型,或者有其他要求(但是我什至无法发明),则必须将日期时间转换为不变的datetime字符串,并将此字符串放入db中。

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

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

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

我不认为您应该将文化信息与日期一起存储

如果您想记住用户偏爱的日期显示方式,可以考虑一下,

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

只需查看用户的区域设置,就可以了。

要回答您的问题:

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

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

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

MSDN判断,我认为构造函数将抛出ArgumentException,因为机器上不存在区域性。

快速浏览一下CultureInfo类 ,就可以将CultureInfo对象仅序列化为Name和UseUserOverride,这意味着有关区域性的任何真实信息始终存储在Windows中,并且依赖于Name是正确的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM