【发布时间】:2014-03-15 14:50:53
【问题描述】:
我在英国,我的电脑总是显示英国日期格式 (dd/mm/yyyy)。
我的 WPF 项目出于某种原因将我的 DateTime 格式转换为美国类型。这发生在我的工作机器和家用机器上。
我已经能够非常简单地复制这个问题
<Window x:Class="TimeIssues.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TextBlock Text="{Binding MyTime}"></TextBlock> <!-- the value is 1/28/2014 10:15:37 (note it is M/dd/yyyy....)
</Grid>
</Window>
而在后面的代码中,简单的
public partial class MainWindow : Window
{
public MainWindow()
{
SetMyTime("28/01/2014 10:15:37"); //note, this is dd/MM/yyyy .... format
this.DataContext = this;
InitializeComponent();
}
private void SetMyTime(string dateTime)
{
DateTime dt;
DateTime.TryParseExact(dateTime, "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.None, out dt);
MyTime = dt; // the value is expected, showing 28/01/2014 10:15:37
}
public DateTime MyTime { get; set; }
}
只是为了确认这不是 IT 问题(或者我认为),我的电脑设置为英国(并且位置也设置为英国,非 unicode 程序的当前语言也是如此)
我已阅读WPF format DateTime in TextBlock? 但这无济于事(我不认为),因为该问题是关于在格式已知时设置格式。
如果我将我的 MyTime 从 DateTime 更新为 string,那么结果就是预期的(英国格式)!问题是当类型是不需要的 DateTime 时,WPF 会更改格式!
我的问题是 2 倍 -
- 我不知道用户需要的格式(我的软件分布在世界各地)。
- WPF 似乎以任何方式错误地更改了格式!
如何告诉 WPF 使用用户的区域设置?有没有办法读取操作系统设置(根据上面的屏幕截图)?
【问题讨论】: