我继承了如下代码:
System.DateTime dateTimeOut;
if(DateTime.TryParse("18/06/2015", out dateTimeOut))
{
Console.WriteLine("Good Job!");
}“干得好!”永远不会打印出来。从MSDN中,我发现DateTime.TryParse使用来自System.Globalization.DateTimeFormatInfo.CurrentInfo的DateTime格式,而后者来自Thread.CurrentThread.CurrentCulture.DateTimeFormat。在我的系统中,它是"mm/dd/yyyy“--这就是为什么"18/06/2015”无法解析的原因。
然后我转到控制面板,将DateTime格式更改为"dd/mm/yyyy“,并重新启动了我的PC。但是当我再次运行程序时,Thread.CurrentThread.CurrentCulture.DateTimeFormat仍然是"mm/dd/yyyy"....I我想知道谁控制这个设置,我可以在哪里更改它?
发布于 2015-06-20 01:01:21
指定您的区域性:
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!");
}Good Job被发送到这里的控制台。
发布于 2015-06-20 00:57:46
您可以使用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.0mcorlib中为m_userDefaultCulture,在.NET 4.0mcorlib中为s_userDefaultCulture ),用于控制如果线程没有在其自身上设置该属性,CurrentCulture将返回什么。
https://stackoverflow.com/questions/30943284
复制相似问题