Geben Sie ein Datum in einer anderen Zeitzone C#
Habe ich eine asp.net Anwendung, die laufen muss, einige code, der jeden Tag zu einer bestimmten Zeit in die Eastern-Zeitzone (Sommerzeit beachten). Also mein Erster Gedanke ist, bekommen die Ost-Zeit-Wert, und konvertieren Sie es auf der lokalen server-Zeit.
Also brauche ich etwas wie dieses:
var eastern = DateTime.Today.AddHours(17); //run at 5pm eastern
var timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
var utc = TimeZoneInfo.ConvertTimeToUtc(eastern, timeZoneInfo);
var local = TimeZoneInfo.ConvertTimeFromUtc(utc, TimeZoneInfo.Local);
Aber wie kann ich festlegen, dass die Ost-DateTime-Objekt sollte in der EST-Zeitzone.
Bin ich an dieses der falsche Weg ist?
Diese Frage scheint eine Antwort: stackoverflow.com/questions/246498/...
InformationsquelleAutor mikefrey | 2010-02-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ersten, es gibt mehrere Dinge, die Sie haben zu prüfen. Sie haben, um mit der Sommerzeit, die von Zeit zu Zeit zu ändern scheint (start-und Enddatum geändert haben zweimal in den letzten 10 Jahren). Also in der nördlichen Hemisphäre im Winter, Eastern time -5 GMT (oder UTC). Aber, im Sommer GMT -6 oder ist das -4 GMT, ich kann nie halten Sie es gerade (oder sollte ich).
Gibt es einige DNF-Bibliothek Funktionen, um mit Zeit-zone Informationen, aber Sie wirklich brauchen .net 3.5 für die meisten nützlichen Sachen. Es gibt die TimeZoneInfo-Klasse .net 3.5.
Beachten Sie auch, dass jedes Jahr zweimal eine Stunde verloren oder gewonnen, so Sie haben auch zu berücksichtigen, dass, wenn, zum Beispiel, haben Sie einen countdown-timer der Anzeige "Zeit bis zum nächsten Bearbeitung" oder sowas. Die Tatsache ist, die Zeit die Handhabung ist nicht so einfach wie es scheint auf den ersten Gedanken, und es gibt viele Grenzfälle.
Diese Regel bedeutet, dass Sie sind Einstellung Ihrer Quelle DateTime in einer Weise umgeht, dass die Einstellung der Art geben. DateTime.Nun, zum Beispiel hat eine Art von Lokalen. Wie sind Sie mit der Versorgung der Quelle DateTime? Ich vermute, Ihr mit einem der Konstruktoren wie diese: DateTime dt = new DateTime(2010, 2, 1); diese legt die Art auf "nicht angegeben". Dies setzt die Art: DateTime dt = new DateTime(2010, 2, 1, 0, 0, 0, DateTimeKind.Utc);
InformationsquelleAutor Erik Funkenbusch
Einen
DateTime
weiß nicht, über eine Zeitzone. AuchDateTimeOffset
nicht wirklich wissen, über einen Zeit - zone, es kennt UTC sofortige und offset.Schreiben Sie Ihre eigene Struktur, die hat haben eine
TimeZoneInfo
und einDateTime
, aber ich bin mir nicht sicher, müssen Sie es in diesem Fall. Sind Sie nur versuchen zu planen 5pm in Eastern time, oder ist das eigentlich mehr allgemein? Was machst du mit denDateTime
(oder was auch immer) hinterher? MitDateTimeOffset
undTimeZoneInfo
können Sie auf jeden Fall erhalten die UTC Augenblick der Zeit, die Sie interessiert sind; wenn Sie brauchen nur zu wissen, die Zeit zwischen "jetzt" und dann, das ist ziemlich einfach.Fühle ich mich verpflichtet zu betonen, dass, wenn Noda Zeit ist serienreif, es würde fast sicher die richtige Antwort 🙂
Ja, ich versuche gerade zu planen, etwas zu laufen um 5pm eastern (Sommerzeit beachten).
InformationsquelleAutor Jon Skeet
Scheint, ich konnte die Antwort auf meine eigene Frage. Hier ist der code, den ich verwende um eine weiter-laufen
DateTime
Objekt.Tun, all die Konvertierung mithilfe
DateTimeOffset
stattDateTime
als wirksam erwiesen. Es scheint sogar zu behandeln Sommerzeit richtig.InformationsquelleAutor mikefrey
Können Sie die DateTime.UtcNow zu bekommen UTC central time(die ich glaube, ist GMT 0) und aus htere auf finden Sie einfach heraus, wie viele Zeitzonen die, die Sie wollen, ist und entfernen/hinzufügen einer Stunde für jede zone.
InformationsquelleAutor Ravenheart