2013-06-04 13 views
11

Moja aplikacja synchronizuje dane na kilku różnych urządzeniach. Z tego powodu przechowuje wszystkie daty w strefie czasowej UTC, aby uwzględnić różne urządzenia, które mogą być ustawione na różne strefy czasowe.Wyświetlanie czasu w lokalnej strefie czasowej w WPF/XAML

Problem polega na tym, że kiedy odczytuję daty z powrotem i wyświetlam je, wydaje się, że są nieprawidłowe (większość użytkowników korzysta z brytyjskiego czasu letniego, więc godzinę później).

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

Czy muszę ręcznie zastąpić ustawioną właściwość CurrentCulture w wątku interfejsu użytkownika? Wiem, że muszę to zrobić w Silverlight.

Odpowiedz

12

Czy podczas analizowania zapisanego pliku określasz "Utc" jako DateTime i przekształcasz go w DateTime.ToLocalTime()?

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

    return utcTime.ToLocalTime(); 
    } 

    set { 
    ... 
    } 
} 

^^ działa dobrze dla mnie

Aktualizacja:

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}}" /> 
+0

Nie robię niczego podczas ładowania DateTime z bazy danych, Używam tylko jednostek EntityFramework ModelFirst. Może muszę zastąpić tę właściwość. – BenCr

+0

@BenCr cóż, mógłbyś zrobić to samo, co miałem w getcie własności w konwerterze. Będę edytować moją odpowiedź za chwilę – Viv

+1

Nie ma potrzeby, mogę wybić konwerter, po prostu nie chciałem iść tą drogą dodawania go do każdego wiązania z datą w nim. Miałem nadzieję, że coś w silniku XAML będzie formatować daty zgodnie z aktualnymi ustawieniami kultury interfejsu użytkownika. – BenCr

Powiązane problemy