如何更改" CurrentThread.CurrentCulture.DateTimeFormat"

时间:2015-06-19 16:48:41

标签: c# datetime

我继承了以下代码:

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"无法解析。

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

2 个答案:

答案 0 :(得分:2)

指定您的文化:

def

Good Job将在此处发送到控制台。

答案 1 :(得分:1)

您可以使用DateTime.TryParse which accepts an IFormat Provider的重载:

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时间格式的文化的一个例子。你应该使用适合你的那个。

或者您可以使用奥斯汀的accepted answer of this question来改变整个应用领域的文化:

  

在.NET 4.5中,您可以使用CultureInfo.DefaultThreadCurrentCulture   用于更改AppDomain文化的属性。

     

对于4.5之前的版本,你必须使用反射来操纵   AppDomain的文化。有一个私有静态字段   CultureInfo(.NET 2.0 mscorlib中的m_userDefaultCulture,   .NET 4.0 mscorlib中的s_userDefaultCulture控制着什么   如果线程未设置该属性,则CurrentCulture返回   本身。