我需要基于两个字母的ISO-3166国家代码来定位我的C# DateTime对象。
有办法吗?
我只能使用5个字符的国家代表(en-US,nl-NL等等)应用特定的文化。
System.Globalization.CultureInfo cultureinfo =
new System.Globalization.CultureInfo("nl-NL");
DateTime dt = DateTime.Parse(date, cultureinfo);即使是一个满是映射也可以(即一个以上的国家代码映射到一个C#文化)。
发布于 2016-01-13 12:17:49
来自构造函数文档;
有关预定义区域性名称的列表,请参见国家语言支持API参考
也来自属性
没有定义US,但是有en (如果您必须使用两个字母名称),您可以使用它。所有这些都被定义在这个标准中。
var cultureInfo = new CultureInfo("en");所有这两个字母的代码都是有效的,除了iv,它是InvariantCulture的,所以我们可以忽略它。我写了一个简单的代码来检查它。
foreach (var culture in CultureInfo.GetCultures(CultureTypes.AllCultures))
{
try
{
var c = new CultureInfo(culture.TwoLetterISOLanguageName);
}
catch (Exception)
{
Console.WriteLine(culture.TwoLetterISOLanguageName); // Only prints "iv"
}
}如何创建自己的映射?我建议遵循这些步骤;
KeyValuePair结构,其中包含ISO-3166双字母代码作为第一个字母代码和ISO639-1双字母代码作为第二个字母代码。CultureInfo。发布于 2016-01-13 11:53:10
如果.net支持不变区域性,您应该能够使用它。
例如,这个方法可以:
var culture = new CultureInfo("EN");正如您已经注意到的,似乎没有完全支持所有的国家代码,这是因为它需要的两个字符是一个中立文化。
您可以通过以下方法获得所有受支持区域性的列表:
CultureInfo.GetCultures(CultureTypes.AllCultures);特别是具有以下内容的中立型:
CultureInfo.GetCultures(CultureTypes.NeutralCultures);var culture = new CultureInfo("US");不起作用的原因是我们的中立文化是EN。(特定的培养是en-US)。
关于转换国家文化代码还有其他高投票率的答案,我不打算在这里欺骗它。
发布于 2017-04-15 11:37:41
CultureInfo.Name的最后一部分是国家的ISO-3166代码,所以我就是这样结束我的解决方案,
public static CultureInfo GetCultureFromTwoLetterCountryCode(string twoLetterISOCountryCode)
{
try
{
return CultureInfo.GetCultures(CultureTypes.AllCultures
& ~CultureTypes.NeutralCultures)
.Where(m => m.Name.EndsWith("-"+twoLetterISOCountryCode))
.FirstOrDefault();
}
catch
{
return null;
}
}唯一的问题是有些国家有一个以上的文化,比如GB,所以你不能用ISO-3166代码来选择正确的文化,
cy(联合王国) 恩格勃英语(联合王国) gd苏格兰盖尔语(联合王国)
因此,GetCultureFromTwoLetterCountryCode("GB")将返回"cy-GB"文化,这可能对威尔士,但不适用于苏格兰。
您可以忽略这些例外情况,或者创建您自己的文化信息数据库,并且只为每个国家存储一种文化。这将是最好的解决办法。
https://stackoverflow.com/questions/34765235
复制相似问题