我继承了以下代码:
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" ....我想知道是谁控制了这个设置以及我可以在哪里更改它?
答案 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返回 本身。