2016-10-03 1 views
0

Ich habe ein .NET C# und muss die lokale Zeit jedes Datumszeitfelds, das dem Endbenutzer angezeigt wird, als lokale Zeit des Benutzers abrufen. gibt es eine Möglichkeit, dies global zu handhaben, ohne jeden Ort ändern zu müssen, an dem eine Datetime angezeigt wird?C# global Datum Zeit über die Anwendung hinweg lokalisieren

Die Systemzeiten werden auf UTC eingestellt und alle Daten werden gespeichert und als UTC zurückgegeben.

ein Beispiel wäre, wenn die Zeit in dem System, das an die Anwendung zurückgegeben wird 16.00 Uhr UTC ist ein Benutzer in der östlichen Zeit sitzen sollte diese Zeit als 1200hrs finden und ein Benutzer in

sitzt ich habe gesehen einige Lösungen, die js verwenden, aber das ist keine Option für uns

dank für die Hilfe

+0

Sehr unklar, was Sie fragen ... Für mich "Systemzeiten sind auf UTC eingestellt" bedeutet, dass UTC * Ortszeit * ist - welche andere Ortszeit suchen Sie? Auch "IIS" ist etwas seltsames Tag - möglicherweise meinen Sie "das ist Web-Server-Code in benutzerdefinierten nonASP.Net-Framework" - möchten Sie vielleicht [bearbeiten] veröffentlichen und klären, dass. –

Antwort

1

Sie müssen den Überblick über die Benutzer der lokalen, in einem Cookie oder einer Datenbank, können Sie zwei Werte speichern müssen helfen Sie in der i18n (Internationalisierung), dann, wenn Sie etwas formatieren müssen, nutzen Sie diese zwei Klassen von C#: TimeZoneInfo und CultureInfo, die erste muss die Zeitzone des Landes und die zweite die Zeitzone (Sie können alle Zeitzonen mit TimeZoneInfo.GetSystemTimeZones() sehen, dann verwenden Sie diese Klassen, um Ihre Texte zu formatieren.

Ein Beispiel:

var timeZoneInfo = string.IsNullOrEmpty(Settings.CountryTimezone) ? 
     TimeZoneInfo.Local : 
     TimeZoneInfo.FindSystemTimeZoneById(Settings.CountryTimezone); 
var cultureInfo = string.IsNullOrEmpty(Settings.CountryCulture) ? 
     CultureInfo.CurrentCulture : 
     CultureInfo.GetCultureInfo(Settings.CountryCulture); 

Dann nutzen Sie diese wie folgt Objekte:

var dateTime = TimeZoneInfo.ConvertTimeFromUtc(client.ActivatedOn.Value.UtcDateTime, timeZoneInfo); 

Und in einer Ansicht (zum Beispiel):

@dateTime.ToString("G", cultureInfo) 

Damit Sie sein zeigt dem Benutzer nicht nur das richtige Datum (trotz der Sommerzeit im Land), sondern im lokalen Format.

Verwandte Themen