10

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

我在澳大利亚,所以我希望以 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 相比,Windows 8 上的 en-AU 文化不同,这意味着它以 mm/dd 格式解释像“1/11”这样的日期Windows 8,而在 Windows 7 上,它以 dd/mm 格式解释它们,这是我在使用 en-AU 文化时所期望的。

4

2 回答 2

1

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

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

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

于 2013-01-06T06:36:26.527 回答
0

使用

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

将更新您当前线程的月份和日期格式。Windows Server 2012 中的MonthDayPattern变化。我还没有弄清楚为什么。

于 2016-07-07T00:44:16.653 回答