如何更改“CurrentThread.CurrentCulture.DateTimeFormat”

本文关键字:DateTimeFormat CurrentCulture CurrentThread 何更改 | 更新日期: 2023-09-27 17:57:06

我继承了如下代码:

System.DateTime dateTimeOut;
if(DateTime.TryParse("18/06/2015", out dateTimeOut))
{
  Console.WriteLine("Good Job!");
}

"干得好!"从未被打印出来。从MSDN中,我发现DateTime.TryParse使用来自System.Globalization.DateTimeFormatInfo.CurrentInfo的日期时间格式,而该格式又来自Thread.CurrentThread.CurrentCulture.DateTimeFormat。在我的系统中,它是"mm/dd/yyyy" - 这就是为什么无法解析"18/06/2015"的原因。

然后我转到控制面板并将日期时间格式更改为"dd/mm/yyyy"并重新启动我的 PC。但是当我再次运行该程序时,Thread.CurrentThread.CurrentCulture.DateTimeFormat仍然是"mm/dd/yyyy"....我想知道谁控制此设置以及我可以在哪里更改它?

如何更改“CurrentThread.CurrentCulture.DateTimeFormat”

指定区域性:

System.DateTime dateTimeOut;
var culture = CultureInfo.CreateSpecificCulture("en-GB");
var styles = DateTimeStyles.None;
if (DateTime.TryParse("18/06/2015", culture, styles, out dateTimeOut))
{
  Console.WriteLine("Good Job!");
}

良好的工作被发送到控制台 此处.

您可以使用接受 IFormat 提供程序的重载DateTime.TryParse

public static bool DateTime.TryParse(string s,
    IFormatProvider provider,
    DateTimeStyles styles,
    out DateTime result
)

您的代码变为:

System.DateTime dateTimeOut;
if(DateTime.TryParse("18/06/2015", new CultureInfo("it-IT"), DateTimeStyles.None, out dateTimeOut))
{
  Console.WriteLine("Good Job!");
}

it-IT只是使用 dd/MM/yyyy 时间格式的区域性示例。 您应该使用适合您的那个。

或者,您可以使用来自奥斯汀的此问题的公认答案来更改整个应用程序域的区域性:

在 .NET 4.5 中,可以使用 CultureInfo.DefaultThreadCurrentCulture 属性以更改应用程序域的区域性。

对于 4.5 之前的版本,您必须使用反射来操作 应用域的区域性。上有一个私有静态字段 CultureInfo (m_userDefaultCulture in .NET 2.0 mscorlib, s_userDefaultCulture在 .NET 4.0 mscorlib 中)控制什么 如果线程未将该属性设置为 CurrentCulture,则返回 本身。