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 .

5voto

Rene Punkte 59

Hier ein weiterer Vorschlag, um ein GMT-Zeitstempel-Objekt zu erhalten:

import java.sql.Timestamp;
import java.util.Calendar;

...

private static Timestamp getGMT() {
   Calendar cal = Calendar.getInstance();
   return new Timestamp(cal.getTimeInMillis()
                       -cal.get(Calendar.ZONE_OFFSET)
                       -cal.get(Calendar.DST_OFFSET));
}

5voto

shahtapa Punkte 51

Hier ist eine weitere Möglichkeit, die GMT-Zeit im String-Format zu erhalten

String DATE_FORMAT = "EEE, dd MMM yyyy HH:mm:ss z" ;
final SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
String dateTimeString =  sdf.format(new Date());

4voto

Ammar Punkte 68

Die einfache Funktion, die Sie verwenden können:

Bearbeiten: Diese Version verwendet die modernen java.time-Klassen.

private static final DateTimeFormatter FORMATTER
        = DateTimeFormatter.ofPattern("dd-MM-uuuu HH:mm:ss z");

public static String getUtcDateTime() {
    return ZonedDateTime.now(ZoneId.of("Etc/UTC")).format(FORMATTER);
}

Rückgabewert der Methode:

26-03-2022 17:38:55 UTC

Ursprüngliche Funktion:

 public String getUTC_DateTime() {
    SimpleDateFormat dateTimeFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss z");
    dateTimeFormat.setTimeZone(TimeZone.getTimeZone("UTC"));//gmt
    return dateTimeFormat.format(new Date());

}

Rückgabe der obigen Funktion:

26-03-2022 08:07:21 UTC

0 Stimmen

Danke, @OleV.V., dass Sie es für mich und alle anderen klarer und aktueller machen. Kurz gesagt, Ihr Kommentar auch lehren mich gut. halten Sie es auf.

4voto

user2427 Punkte 7680

Mit:

Calendar cal = Calendar.getInstance();

Entonces cal haben das aktuelle Datum und die Uhrzeit.
Sie können auch das aktuelle Datum und die Uhrzeit für die Zeitzone mit abrufen:

Calendar cal2 = Calendar.getInstance(TimeZone.getTimeZone("GMT-2"));

Sie könnten fragen cal.get(Calendar.DATE); oder andere Kalender konstant über andere Details.
Date und Timestamp sind in Java veraltet. Die Kalenderklasse ist es nicht.

6 Stimmen

Bestimmte Methoden und Konstruktoren von Date und Timestamp sind veraltet, aber die Klassen selbst sind es nicht.

3voto

My God Punkte 22646

Konvertierung der aktuellen Datumszeit in UTC:

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");

DateTimeZone dateTimeZone = DateTimeZone.getDefault(); //Default Time Zone

DateTime currDateTime = new DateTime(); //Current DateTime

long utcTime = dateTimeZone.convertLocalToUTC(currDateTime .getMillis(), false);

String currTime = formatter.print(utcTime); //UTC time converted to string from long in format of formatter

currDateTime = formatter.parseDateTime(currTime); //Converted to DateTime in UTC

1 Stimmen

Sie machen hier zu viel Arbeit. (a) Das Formatierungsmuster, das Sie definieren, ist bereits standardmäßig in eine DateTime eingebaut; rufen Sie einfach toString auf eine DateTime, um diese zu erhalten ISO 8601 String-Muster. (b) Viel zu viel Code für die Konvertierung zwischen Zeitzonen. Rufen Sie einfach "toDateTime" auf und übergeben Sie ein Zeitzonenobjekt. Etwa so: myDateTime.toDateTime( DateTimeZone.UTC ) . Für eine bestimmte Zeitzone instanziieren und übergeben Sie ein Zeitzonenobjekt, das auf einer Eigenname anrufen myDateTime.toDateTime( DateTimeZone.forID( "Asia/Tehran" ) ) .

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