C #: Stellt sicher, dass DateTime.Now eine GMT + 1 Zeit zurückgibt

8

Ich verwende DateTime.Now , um etwas nach dem heutigen Datum zu zeigen, und wenn ich lokal arbeite (Malta, Europa) erscheinen die Zeiten korrekt (natürlich wegen der Zeitzone), aber natürlich wenn ich es auf meinen Hosting Server (USA) hochlade ), DateTime.Now repräsentiert nicht die korrekte Zeitzone.

Daher kann ich in meinem Code wie kann ich DateTime.Now konvertieren, um die Zeit von einer GMT + 1 Zeitzone korrekt zurückzugeben ?

    
Andreas Grech 10.07.2009, 09:38
quelle

3 Antworten

14

Verwenden Sie die TimeZoneInfo-Klasse in System.Core;

Sie müssen dafür DateTimeKind auf DateTimeKind.Utc setzen.

%Vor%

Nur wenn Sie .Net 3.5 verwenden!

    
ThePower 10.07.2009, 09:45
quelle
14

Es hängt davon ab, was Sie mit "einer GMT + 1 Zeitzone" meinen. Meinst du permanent UTC + 1, oder meinst du UTC + 1 oder UTC + 2 abhängig von DST?

Wenn Sie .NET 3.5 verwenden, verwenden Sie TimeZoneInfo , um zu erhalten eine geeignete Zeitzone, dann verwenden:

%Vor%

Sie müssen die System-ID für die Zeitzone von Malta berechnen, aber Sie können dies leicht tun, indem Sie diesen Code lokal ausführen:

%Vor%

Gemessen an Ihren Kommentaren ist dieses Bit irrelevant, aber nur für andere ...

Wenn Sie nicht mit .NET 3.5 verwenden, müssen Sie die Sommerzeit selbst berechnen. Um ehrlich zu sein, wird der einfachste Weg, dies zu tun, eine einfache Nachschlagetabelle sein. Berechnen Sie die DST-Änderungen für die nächsten Jahre, und schreiben Sie dann eine einfache Methode, um den Offset zu einer bestimmten UTC-Zeit zurückzugeben, wobei diese Liste fest codiert ist. Möglicherweise möchten Sie nur eine sortierte List<DateTime> mit den bekannten Änderungen in und wechseln Sie zwischen 1 und 2 Stunden, bis Ihr Datum nach der letzten Änderung ist:

%Vor%     
Jon Skeet 10.07.2009 09:48
quelle
4

Ich glaube nicht, dass Sie in Ihrem Code eine Eigenschaft festlegen können, die bewirkt, dass DateTime.Now etwas anderes zurückgibt als die aktuelle Uhrzeit des Computers, auf dem der Code ausgeführt wird. Wenn Sie eine Möglichkeit haben wollen, immer eine andere Zeit zu bekommen, müssen Sie wahrscheinlich eine andere Funktion einfügen. Sie können den Umlauf über UTC durchführen und den gewünschten Offset hinzufügen:

%Vor%

(Codebeispiel aktualisiert nach Lukes Kommentar zu den inneren Funktionen von DateTime.Now)

    
Fredrik Mörk 10.07.2009 09:42
quelle

Tags und Links

Django: Verwenden von Annotate, Count und Distinct in einem Queryset ___ qstntxt ___

Ich möchte alle Java-Pakete sehen. Wo sind die Pakete in meiner Maschine gespeichert? Kann jemand helfen. Ich habe im jdk-Ordner gesucht und awt.dll und alle gefunden. Aber es sind nur ein paar. Kann ich alle sehen?

    
___ answer1242097 ___

Mein JDK 1.6.0_13 hat eine src.zip, die den gesamten Quellcode enthält. Schau dir das an.

    
___ answer21542271 ___

Windows:

Für komprimierte kompilierte Java-Pakete (Java Class Library, JCL): Programmdateien / java / jdk / jre / lib / rt.jar

Für die Quelle der Pakete: Programmdateien / java / jdk / src.zip

Wir können jede entpackende Software verwenden, um sie zu untersuchen.

    
___ answer1240407 ___

Angenommen, Sie meinen die Pakete, die Klassenbibliotheken wie java.lang. * und java.util. * enthalten, dann befinden sie sich im Verzeichnis "lib", egal wo Ihre Java Runtime Environment (JRE) installiert ist.

Unter Windows wäre das etwa so:

%Vor%

Dort sollten Sie Dateien wie %code% sehen, die die Kern-Java-Klassen enthalten und %code% , die viele der erweiterten Kodierungsunterstützung für EBCDIC und die CJK-Sprachen enthalten.

In einem parallelen %code% -Verzeichnis befinden sich die ausführbaren Dateien für Java und zugehörige Dienstprogramme.

Wenn Sie das Java Development Kit (JDK) installiert haben, finden Sie in dem Verzeichnis, in dem Sie die Bibliotheken finden, wahrscheinlich eine %code% -Datei. Dies kann entweder mit dem Dienstprogramm %code% oder mit einem standardmäßigen zip -Stil entpackt werden und enthält die Java-Quellen für die Standardklassenbibliothek.

Einige von Java, wie z. B. die virtuelle Maschine selbst, sind maschinenspezifisch und werden Teil einiger DLLs oder EXEs sein.

    
___ tag123java ___ Java (nicht zu verwechseln mit JavaScript oder JScript oder JS) ist eine universelle objektorientierte Programmiersprache, die für die Verwendung in Verbindung mit der Java Virtual Machine (JVM) entwickelt wurde. "Java-Plattform" ist der Name für ein Computersystem, auf dem Tools zum Entwickeln und Ausführen von Java-Programmen installiert sind. Verwenden Sie dieses Tag für Fragen, die sich auf die Java-Programmiersprache oder Java-Plattform-Tools beziehen. ___ tag123filestruktur ___ hilf uns dieses Wiki zu bearbeiten ___ tag123packages ___ Für Fragen zur Verwendung oder Benennung von Paketen in Java, Scala, Python und anderen Sprachen. ___ answer1240405 ___

Wenn Sie eine Liste von Paketen in der Standardinstallation haben möchten, gehen Sie einfach zu den Javadocs und schaue in die obere linke Ecke.

Wenn Sie die .class-Dateien sehen wollen, befinden sie sich in %code% im JRE-Verzeichnis ( %code% ist dasselbe wie %code% , also können Sie es mit allem öffnen, was Zip-Dateien öffnen kann).

Wenn Sie den Quellcode sehen möchten, suchen Sie in %code% im JDK-Verzeichnis. Wenn es nicht dort ist, haben Sie wahrscheinlich gewählt, es nicht zu installieren, als Sie das JDK installierten.

Denken Sie daran, dass Pakete als Ordner auf der Festplatte dargestellt werden, so dass Sie vielleicht etwas enttäuscht von dem sind, was Sie sehen.

    
___ answer1240400 ___

Sie können versuchen, die Datei rt.jar, die normalerweise in %code% verfügbar ist, zu entpacken. Die JAR-Datei sollte die classfiles aller %code% enthalten, wenn Sie danach fragen.

    
___