596 Stimmen

Wie kann ich das aktuelle Datum und die Uhrzeit in UTC oder GMT in Java abrufen?

Wenn ich eine neue Date Objekts wird sie mit der aktuellen Zeit initialisiert, aber in der lokalen Zeitzone. Wie kann ich das aktuelle Datum und die Uhrzeit in GMT abrufen?

0 Stimmen

Ich weiß, diese Art von Themen sind völlig über diskutiert, aber ich fand die commons-lang-Paket wirklich behandelt diese gemeinsame Java-Probleme gut. commons.apache.org/lang/api-2.5/org/apache/commons/lang/time Informieren Sie sich über die verschiedenen Pakete, die sie anbieten.

0 Stimmen

Welche Ortszeit wünschen Sie und mit welcher Genauigkeit. Die meisten Zeitzonen sind relativ zur UTC definiert, mit einem festen Offset gemessen in SI Sekunden, aber die Beziehung der GMT, die auf der Sonnenbeobachtung und einer (leicht) variablen Länge der Sekunde basiert, ist komplexer. Die beiden unterscheiden sich um bis zu 0,9 Sekunden.

4 Stimmen

A Date enthält keine Zeitzone, daher ist "aber in der lokalen Zeitzone" nicht korrekt (oder bestenfalls ungenau). Siehe Alles über java.util.Date .

7voto

huljas Punkte 147

Wenn Sie ein Datumsobjekt mit an UTC angepassten Feldern haben möchten, können Sie dies wie folgt tun mit Joda Zeit :

import org.joda.time.DateTimeZone;
import java.util.Date;

...

Date local = new Date();
System.out.println("Local: " + local);
DateTimeZone zone = DateTimeZone.getDefault();
long utc = zone.convertLocalToUTC(local.getTime(), false);
System.out.println("UTC: " + new Date(utc));

1 Stimmen

Sie arbeiten zu hart. Joda-Time kann dies in einer einzigen Codezeile tun. Siehe meine eigene Antwort zu dieser Frage. Rufen Sie die .toDateTime Methode und übergeben Sie die Konstante für die UTC-Zeitzone.

1 Stimmen

DateTime utcDate = new DateTime().toDateTime(DateTimeZone.UTC)

6voto

Ashallar Punkte 910

Hier ist meine Implementierung von toUTC:

    public static Date toUTC(Date date){
    long datems = date.getTime();
    long timezoneoffset = TimeZone.getDefault().getOffset(datems);
    datems -= timezoneoffset;
    return new Date(datems);
}

Es gibt wahrscheinlich mehrere Möglichkeiten, es zu verbessern, aber für mich funktioniert es.

6voto

mjh2007 Punkte 776

Sie können verwenden:

Calendar aGMTCalendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"));

Dann werden alle Operationen, die mit dem aGMTCalendar-Objekt durchgeführt werden, mit der GMT-Zeitzone durchgeführt und haben nicht die Sommerzeit oder feste Offsets angewendet. Ich denke, der Vorposter hat Recht, dass das Date()-Objekt immer eine GMT zurückgibt, erst wenn man etwas mit dem Datumsobjekt macht, wird es in die lokale Zeitzone konvertiert.

6voto

Justin Punkte 61
SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MM-dd");
dateFormatGmt.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(dateFormatGmt.format(date));

0 Stimmen

Bitte fügen Sie eine Erklärung zu Ihrer Antwort hinzu, wie unterscheidet sie sich von den vielen anderen Antworten?

0 Stimmen

Hängt bei dieser Methode die Zeit vom Gerätekalender ab?

6voto

nithinreddy Punkte 6116

Sie können diese direkt verwenden

SimpleDateFormat dateFormatGmt = new SimpleDateFormat("dd:MM:yyyy HH:mm:ss");
dateFormatGmt.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(dateFormatGmt.format(new Date())+"");

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X