2015-04-22 95 views
2

工作在大型WPF应用程序上,并且存在DateTime格式的一些问题,这是一个巨大的代码库,许多地方没有指定区域性。WPF默认日期时间格式

当用户在Windows 7或8上打开应用程序时,日期时间格式不同(Win 7使用斜线,Win 8使用破折号)。

我尝试在应用程序启动时将文化设置为“en-US”(请参阅​​下面的链接),但它似乎不起作用? Setting Culture (en-IN) Globally in WPF App

如何设置我的WPF应用程序不使用用户机器的文化?

+0

一定要检查每个操作系统上的时间/日期格式设置匹配。用户可以指定他们是否想要破折号或斜杠 - 而且巧合的是,您应该如何格式化日期字符串。我讨厌被迫以特定格式读取日期-_- – Kcvin

+0

这是Windows 8用户的工作,他们需要进入他们的DateTime设置并添加斜杠而不是破折号。但是我的应用程序总是假设使用斜杠。这是用于UI中的显示目的,无论代码是在做什么DateTime.Now或DateTime.Parse等 – devfunkd

+0

在一个地方的代码是DateTime.Parse(“2014/05/13”),但解析后的值是不管我提供什么文化,我都不知道为什么。 – devfunkd

回答

2

以下是我在OnStartup使用。它与您使用DefaultThreadCurrentCulture时链接的SO问题不同,因为它为整个流程和任何启动的线程设置了默认值。

DefaultThreadCurrentCultureDefaultThreadCurrentUICulture在.NET 4.5及更高...

var newCulture = new CultureInfo(displayCulture); 

// Set desired date format here 
newCulture.DateTimeFormat.ShortDatePattern = "dd MMM yyyy"; 

// You cannot use DefaultThreadCurrentCulture and DefaultThreadCurrentUICulture if 
// you dont have .NET 4.5 or later. Just remove these two lines and pass the culture 
// to any new threads you create and set Thread.CurrentThread... 
CultureInfo.DefaultThreadCurrentCulture = newCulture; 
CultureInfo.DefaultThreadCurrentUICulture = newCulture; 

Thread.CurrentThread.CurrentCulture = newCulture; 
Thread.CurrentThread.CurrentUICulture = newCulture; 

FrameworkElement.LanguageProperty.OverrideMetadata(
    typeof(FrameworkElement), 
    new FrameworkPropertyMetadata(
     System.Windows.Markup.XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag))); 
+0

DefaultThreadCurrentCulture不能解决我的问题。 – devfunkd

+0

他们被添加到.net 4.5中,你将不得不使用Thread.CurrentThread,并且在你启动新的线程时你会仔细地设置它们的文化... – kmcnamee

+0

感谢这解决了它对我来说,我没有意识到我是在4.0,所以我也在同一时间升级。谢谢! – devfunkd

-1

这会为你提供你在找什么,或者你可以使用正则表达式...

DateTime dateTime; 

    bool validDate = DateTime.TryParseExact(
     "04/22/2015", 
     "MM/dd/yyyy", // or you can use MM.dd.yyyy 
     CultureInfo.InvariantCulture, 
     DateTimeStyles.None, 
     out dateTime); 
+0

我需要在全球范围内设置它,有数百个使用DateTime.Now或DateTime.Parse的代码库中出现 – devfunkd

+0

然后创建一个处理它的日期类,我只给了你一段代码来使用,我不是为您的工作编写代码!你似乎有点批评,就像上面的回应你抱怨它没有工作... – TGarrett

+0

问题是关于全球设置,答案并没有这样做。我很抱歉发出这样的声音,对不起。 – devfunkd