2017-02-27 1 views
0

Ich habe Daten in UTC in der Datenbank, und ich habe die Zeitzone des Benutzers in ihren Einstellungen Tabelle.Anzeige UTC Datum zu benutzerdefinierte Zeitzone

Ich habe eine Erweiterungsmethode von der UTC Benutzer Zeit zu konvertieren:

public static DateTime ToClientTime(this DateTime dt) 
{ 
    TimeZoneInfo cstZone = TimeZoneInfo.FindSystemTimeZoneById("SA Pacific Standard Time"); //Hardcoded timezone 
    return TimeZoneInfo.ConvertTimeFromUtc(dt, cstZone); 
} 

Wie Sie in der unten stehenden Code sehen können, jetzt ist es eine hartkodierte Zeitzone Namen hat, und ich sollte mit dem Parameter übergeben, Wert (Übergabe der Benutzerzeitzone).

In CurrentThread setze ich die Benutzerkultur, also der gesamte Code in dieser Anfrage verhält sich in dieser Kultur (Datumsformate, Ressourcen, Zahlenformate). Es gibt eine Möglichkeit, die Zeitzone des Benutzers in einem globalen Objekt wie CurrentThread oder ähnlichem zu speichern?

Ich versuche zu vermeiden, die Zeitzone an die obige Erweiterungsmethode übergeben und stattdessen die Zeitzone von einem globalen Objekt wie CurrentThread erhalten. Die Erweiterungsmethode wird von Controller code und auch von Views aufgerufen.

+0

Es ist unklar, was Sie fragen. Welche Informationen haben Sie eigentlich, was speichern Sie und was möchten Sie erreichen? Zeigen Sie bitte Beispiele mit Daten und Code an. –

+0

Speichern Sie alle Ihre Zeiten in UTC, und verdecken Sie sie einfach in Ihren Ansichten in was auch immer Sie wollen – Trix

+0

@MattJohnson, bitte überprüfen Sie meine Bearbeitung, hoffe es ist jetzt klarer. – Romias

Antwort

-1

Sie haben eine Basiszeit wie UTC, oder? Sie haben keine benutzerdefinierte Zeitzone in der Datenbank. Jetzt können Sie die UTC-Zeitzone je nach Bedarf entweder hinzufügen oder abziehen.

Wahrscheinlich Addition kann eine einfache Lösung bieten. Beispiel:

Name ----------TimeZone 
------------------------ 
Nick ------- UTC - 6 
Hary ------- UTC + 1 

Also, wenn die aktuelle UTC-Zeit 19.00 Uhr oder 18.00 Uhr dann

Nick = 18-6 = 12/12 PM 
Harry = 18+1 = 19/8PM 
+0

Zeitzone! = Offset. Außerdem verfügt .NET über zahlreiche integrierte Funktionen, ohne auf manuelle Berechnungen zurückgreifen zu müssen. –

Verwandte Themen