12

我的应用程序跨多个不同设备同步数据。出于这个原因,它将所有日期存储在 UTC 时区中,以说明可能设置为不同时区的不同设备。

麻烦的是,当我读回日期并显示它们时,它们似乎不正确(大多数用户都在英国夏令时,所以他们落后了一个小时)。

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

我是否需要手动覆盖 UI 线程的设置 CurrentCulture 属性?我知道我必须在 Silverlight 中执行此操作。

4

1 回答 1

14

在解析存储并将其转换为DateTime.ToLocalTime()时,您是否将“Utc”指定为DateTime.KindDateTime

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();
    }
  }

xml:

<Window.Resources>
  <local:UtcToLocalDateTimeConverter x:Key="UtcToLocalDateTimeConverter" />
</Window.Resources>
...
<TextBlock Text="{Binding Submitted, Converter={StaticResource UtcToLocalDateTimeConverter}}" />
于 2013-06-04T15:39:21.547 回答