在TextBox中以d / mm格式输入日期

时间:2012-11-04 00:02:22

标签: .net windows-8 .net-4.5 cultureinfo

我有一个绑定到可以为空的DateTime属性的TextBox。

我在澳大利亚,所以我希望日期以d / mm / yyyy格式呈现。

在我的Windows 7框中,我可以输入d / mm格式的日期,并且它已正确转换(例如,1/11转换为11月1日,13/1转换为1月13日等)。

在我的Windows 8框中,相同的输入被解释为它是美国格式,因此1/11转换为1月11日,13/1失败(因为没有第13个月)。

两台计算机都设置为使用澳大利亚格式,我在Application.StartUp事件中有这段代码:

FrameworkElement.LanguageProperty.OverrideMetadata(GetType(FrameworkElement), New FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)))

Binding的StringFormat设置为d / MM / yyyy,我通过将TextBlock绑定到其StringFormat设置为D的相同属性(长日期格式,它给出的值等)来检查这是否正确'2012年1月11日星期三')。

有没有人有任何想法?

更新:进一步调查(请参阅下面的评论)显示,与Windows 7相比,这种en-AU文化在Windows 8上有所不同,这意味着它会解释日期,如'在Windows 8上采用mm / dd格式的1/11',而在Windows 7上,它以dd / mm格式解释它们,这是我在使用en-AU文化时所期望的。

2 个答案:

答案 0 :(得分:1)

由于不推荐使用IetfLanguageTag,您是否考虑过使用Name属性?

http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.ietflanguagetag.aspx

  

IETF语言标记的格式类似于文化名称   由Name属性返回,但不识别文化   唯一。也就是说,不同的文化共享相同的IETF语言标记   如果这些文化具有相同的语言特征。

答案 1 :(得分:0)

使用

System.Globalization.DateTimeFormatInfo.CurrentInfo.MonthDayPattern = "dd MMMM";

将更新您当前主题的月和日格式。 Windows Server 2012中更改了MonthDayPattern。我还没弄清楚原因。