如何找到文化的默认日期格式

Posted

技术标签:

【中文标题】如何找到文化的默认日期格式【英文标题】:How to find the default dateformat of a Culture 【发布时间】:2012-12-13 02:10:50 【问题描述】:

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

例如 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;

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

【问题讨论】:

【参考方案1】:

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

这应该给你默认的文化设置:

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

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

【讨论】:

这可以工作并提供正确的输出。默认日期格式。【参考方案2】:

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

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

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

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

【讨论】:

CreateSpecificCulture 也只给出当前设置。感谢您的回答。【参考方案3】:

以下似乎对我有用。

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

输出: 月/日/年 dd/MM/yyyy

【讨论】:

如果当前文化相同且 Shortdate 格式不同。输出会有所不同。

以上是关于如何找到文化的默认日期格式的主要内容,如果未能解决你的问题,请参考以下文章

如何根据浏览器文化格式化 JavaScript 日期?

如何修改 Blazor(服务器)中的当前文化日期格式?

无论文化如何,在标签中格式化日期

如何在asp.net core razor pages 2.2中设置日期格式和文化

将任何日期字符串转换为当前文化日期格式

c#日期时间格式