9

好吧,我正在尝试获取文化的默认日期格式。

例如 en-us 有 "m/dd/yyyy" , en-uk 'd/mm/yyyy'。文化可以是客户端机器上的任何东西。和 Dateformat 也可以是任何东西。喜欢文化是 en-us 但日期格式是 dd-MMM-yyyy。

所以在这种情况下,我想将 ShortDateformatString 作为 m/dd/yyyy 而不是 dd-MMM-yyyy。

我尝试使用以下方法为所有文化做到这一点:

string _cultureInfo = CultureInfo.CurrentCulture.IetfLanguageTag;
CultureInfo shortDatefomatString = new CultureInfo(_cultureInfo);
string old = shortDatefomatString.DateTimeFormat.ShortDatePattern;

但它总是返回 mt dd-MMM-yyyy。我需要默认的而不是机器上的设置。

4

3 回答 3

4

我认为问题在于您检索所需文化的方式。

这应该为您提供默认的文化设置:

var cultureLanguageTag = CultureInfo.CurrentCulture.IetfLanguageTag;
var defaultCulture =  CultureInfo.GetCultureInfoByIetfLanguageTag( cultureLanguageTag );

用字符串构造一个应该与文化名称一起使用,我不知道它是否应该与 IETF 标签一起使用,在这种情况下它可能只是返回了当前的文化。

于 2012-12-13T02:41:10.590 回答
1

根据MSDNCurrentCulture将通过以下方式之一返回文化:

  1. CultureInfo.DefaultThreadCurrentCulture如果不为空,则返回。(请注意,除非您专门设置文化,否则这将始终为空。)
  2. 它返回调用 WindowsGetUserDefaultLocaleName函数的结果。这将返回您在控制面板中设置的任何文化。

如果您在控制面板中更改区域性,则可能会在重新启动计算机之前看不到更改。

要测试文化是否显示正确的日期,您可以手动选择一种文化,而不是使用系统文化,方法是使用CultureInfo.CreateSpecificCulture("en-US");(将“en-US”替换为其他国家/地区的文化代码)。

于 2012-12-13T02:39:00.857 回答
0

以下似乎对我有用。

Console.WriteLine(CultureInfo.GetCultureInfo("en-us").DateTimeFormat.ShortDatePattern);
Console.WriteLine(CultureInfo.GetCultureInfo("en-gb").DateTimeFormat.ShortDatePattern);

输出:M/d/yyyy dd/MM/yyyy

于 2012-12-13T03:35:28.050 回答