首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更改"CurrentThread.CurrentCulture.DateTimeFormat“

如何更改"CurrentThread.CurrentCulture.DateTimeFormat“
EN

Stack Overflow用户
提问于 2015-06-20 00:48:41
回答 2查看 1.6K关注 0票数 0

我继承了如下代码:

代码语言:javascript
复制
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我想知道谁控制这个设置,我可以在哪里更改它?

EN

回答 2

Stack Overflow用户

发布于 2015-06-20 01:01:21

指定您的区域性:

代码语言:javascript
复制
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被发送到这里的控制台。

票数 2
EN

Stack Overflow用户

发布于 2015-06-20 00:57:46

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

代码语言:javascript
复制
public static bool DateTime.TryParse(string s,
    IFormatProvider provider,
    DateTimeStyles styles,
    out DateTime result
)

你的代码会变成:

代码语言:javascript
复制
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将返回什么。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30943284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档