Подтвердить что ты не робот

Отображение времени в локальном часовом поясе в WPF/XAML

Мое приложение синхронизирует данные на нескольких разных устройствах. По этой причине он сохраняет все даты в часовой пояс UTC для учета различных устройств, которые могут быть установлены в разные часовые пояса.

Проблема заключается в том, что когда я читаю даты и показываю их, они кажутся неправильными (большинство пользователей находятся в британском летнем времени, поэтому они отстают на час).

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

Нужно ли вручную переопределить свойство CurrentCulture для потока пользовательского интерфейса? Я знаю, что должен сделать это в Silverlight.

4b9b3361

Ответ 1

Вы указываете "Utc" как DateTime.Kind при анализе сохраненного 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}}" />