在WPF/XAML中显示本地时区的时间

本文关键字:时区 时间 显示 WPF XAML | 更新日期: 2023-09-27 18:16:57

我的应用程序跨几个不同的设备同步数据。因此,它将所有日期存储在UTC时区,以考虑不同的设备可能被设置为不同的时区。

问题是,当我读回日期并显示它们时,它们似乎是不正确的(大多数用户使用英国夏令时,所以他们慢了一个小时)。

<TextBlock Margin="5" Style="{StaticResource SmallTextblockStyle}">
    <Run Text="Last Updated:" />
    <Run Text="{Binding Path=Submitted}" />
</TextBlock>

我需要手动重写UI线程的set CurrentCulture属性吗?我知道我必须在Silverlight中这样做。

在WPF/XAML中显示本地时区的时间

是否指定"Utc"作为DateTime。类型时解析存储的DateTime,并将其转换为DateTime.ToLocalTime()?

public DateTime Submitted {
  get {
    DateTime utcTime = DateTime.SpecifyKind(DateTime.Parse(/*"Your Stored val from DB"*/), DateTimeKind.Utc);
    return utcTime.ToLocalTime();
  }
  set {
    ...
  }
}

^^对我来说很好

更新:

class UtcToLocalDateTimeConverter : IValueConverter
  {
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
      return DateTime.SpecifyKind(DateTime.Parse(value.ToString()), DateTimeKind.Utc).ToLocalTime();
    }
    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
      throw new NotImplementedException();
    }
  }
xaml:

<Window.Resources>
  <local:UtcToLocalDateTimeConverter x:Key="UtcToLocalDateTimeConverter" />
</Window.Resources>
...
<TextBlock Text="{Binding Submitted, Converter={StaticResource UtcToLocalDateTimeConverter}}" />