2016-08-02 18 views
-1

Ich habe einige Antworten darüber gesehen, wie Sie dies korrigieren können. Ich habe ein Objekt vom Typ DateTime. Ich habe dieses Objekt wie unten gezeigt zugewiesen.DateTime.UtcNow ist 4 Stunden voraus

obj.TimeStamp = DateTime.UtcNow;

Ich kann nicht scheinen, um die richtige Kombination oder Code-Manipulation zu finden das richtige Datum und Zeit zu bekommen. Es ist immer genau 4 Stunden vor der aktuellen Zeit.

Diese Software wird in verschiedenen Zeitzonen eingesetzt.

Gibt es einen zuverlässigen Weg, um sicherzustellen, dass der Zeitstempel in allen Zeitzonen korrekt ist. Meine Serverzeiteinstellungen sind korrekt.

Vielen Dank.

+0

Ihr Server wird immer in der gleichen Zeitzone sein, also nein. Sie müssen die Zeitzonen Ihrer Benutzer verfolgen und die Zeit für jede Anfrage konvertieren. – dckuehn

+0

UtcNow gibt Ihnen auf der ganzen Welt Zeit, die Sie online lesen können. Wenn Ihre UTC 4 Stunden vor UTC voraus ist, dann hat einer von Ihnen die Uhr falsch eingestellt. – eugeneK

+1

Geben Sie es einfach als UTC zurück und überlassen Sie dem Client die Konvertierung der lokalen Zeit von ihrer Seite. –

Antwort

0

Interessante Frage! Daten und Zeiten sind ein notorisch schwer zu lösendes Problem. Es scheint so einfach zu sein, aber es ist so schwierig, es wirklich zu tun. Wir sind alle so daran gewöhnt, unsere Uhren für die Zeit anzuschauen, obwohl es in der Tat viel schwieriger ist, wenn man Zeitzonen und Sommerzeit benötigt.

Werfen Sie einen Blick auf die ausgezeichnete Noda Time Bibliothek. Auch wenn Sie es nicht verwenden, bietet das Benutzerhandbuch einige großartige Einblicke, warum Daten und Zeiten so schwer zu lösen sind.

Ich vermute, dass Ihr spezielles Problem mit der Tatsache zusammenhängt, dass Ihre Zeitzone Eastern Time ist, die gerade Sommerzeit beobachtet, so dass Ihre Zeitzone 4 Stunden hinter UTC liegt.

Um die Zeit, um Ihre Benutzer zu präsentieren Sie müssen wissen, in welcher Zeitzone sie sind. Wenn sie in New York sind, dann müssen Sie UTC-04:00 verwenden, wenn sie in Kalifornien sind Sie müssen UTC-08:00 verwenden und wenn sie in Neu Delhi sind, müssen Sie UTC+05:30 verwenden.

Dies könnte sich jedoch ändern, wenn sie aufhören, die Sommerzeit zu beobachten, aber seien Sie vorsichtig, da es keine feste Regel dafür gibt. Eastern Time hört am ersten Sonntag im November auf, die Sommerzeit zu stoppen, British Time stoppt am letzten Sonntag im Oktober, Indian Time hat überhaupt keine Sommerzeit und die Regionen der südlichen Hemisphäre beobachten in den Wintermonaten die Sommerzeit (zumindest aus der Nordperspektive) Hemisphäre Regionen).

Viel Glück!

+0

Vielen Dank für Ihre Antwort. – LK22

0

Ich weiß, diese Frage ist alt, aber ...

var localDate = DateTime.UtcNow.ToLocalTime() 

https://msdn.microsoft.com/en-us/library/system.datetime.tolocaltime(v=vs.110).aspx

Lesen Sie die Hinweise in dem MSDN-Artikel. Das ist nicht idiotensicher. Aber wenn Sie nach einer Möglichkeit suchen, die Server-Zeit zu bekommen, ist dies eine schnelle und einfache Möglichkeit, so nah wie möglich zu kommen, ohne zu verrückt zu werden.