2013-06-04 2 views
11

La mia applicazione sincronizza i dati su diversi dispositivi diversi. Per questo motivo memorizza tutte le date nel fuso orario UTC per tenere conto che diversi dispositivi possono essere impostati su fusi orari diversi.Visualizzazione dell'ora nel fuso orario locale in WPF/XAML

Il guaio è che quando leggo le date indietro e le visualizzo sembrano non corrette (la maggior parte degli utenti è in orario estivo britannico, quindi sono indietro di un'ora).

Devo sovrascrivere manualmente la proprietà CurrentCulture impostata del thread dell'interfaccia utente? So che devo farlo in Silverlight.

risposta

12

Si sta specificando "Utc" come DateTime.Kind durante l'analisi dello DateTime memorizzato e anche nella conversione in DateTime.ToLocalTime()?

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

    return utcTime.ToLocalTime(); 
    } 

    set { 
    ... 
    } 
} 

^^ funziona bene per me

Aggiornamento:

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

Io non sto facendo nulla durante il caricamento del DateTime dal database, Sto solo usando EntityFramework ModelFirst entità come vengono. Forse ho bisogno di scavalcare quella proprietà. – BenCr

+0

@BenCr bene si potrebbe fare lo stesso che avevo nella proprietà getter in un convertitore quindi. Modificherò la mia risposta in un secondo – Viv

+1

Non c'è bisogno, posso mettere fuori uso un convertitore, semplicemente non volevo seguire quel percorso per aggiungerlo a ogni rilegatura con una data in esso. Speravo che qualcosa nel motore XAML formattava le date in base alle attuali impostazioni della cultura dell'interfaccia utente. – BenCr