Wenn ich ein neues Date
-Objekt erstelle, wird es auf die aktuelle Uhrzeit, jedoch in der lokalen Zeitzone, initialisiert. Wie kann ich das aktuelle Datum und die aktuelle Uhrzeit in GMT abrufen?
Java.util.Date
hat keine bestimmte Zeitzone, obwohl sein Wert meistens in Bezug auf UTC gedacht ist. Was lässt Sie glauben, dass es Ortszeit ist?
Um genau zu sein: Der Wert innerhalb eines Java.util.Date
ist die Anzahl der Millisekunden seit der Unix-Epoche, die am 1. Januar 1970 um Mitternacht (UTC) auftrat. Dieselbe Epoche könnte auch in anderen Zeitzonen beschrieben werden, die traditionelle Beschreibung bezieht sich jedoch auf UTC. Da seit einer festen Epoche mehrere Millisekunden vergangen sind, ist der Wert in Java.util.Date
zu jedem Zeitpunkt auf der ganzen Welt gleich, unabhängig von der lokalen Zeitzone.
Ich vermute, das Problem ist, dass Sie es über eine Instanz von Calendar anzeigen, die die lokale Zeitzone verwendet, oder möglicherweise Date.toString()
, die auch die lokale Zeitzone verwendet, oder eine SimpleDateFormat
-Instanz, die standardmäßig auch die lokale Zeitzone verwendet.
Wenn dies nicht das Problem ist, senden Sie bitte einen Beispielcode.
Ich würde jedoch empfehlen, dass Sie Joda-Time trotzdem verwenden, was eine viel klarere API bietet.
SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
dateFormatGmt.setTimeZone(TimeZone.getTimeZone("GMT"));
//Local time zone
SimpleDateFormat dateFormatLocal = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
//Time in GMT
return dateFormatLocal.parse( dateFormatGmt.format(new Date()) );
Instant.now() // Capture the current moment in UTC.
Generieren Sie eine Zeichenfolge, um diesen Wert darzustellen:
Instant.now().toString()
2016-09-13T23: 30: 52.123Z
Wie die richtige Antwort von Jon Skeet angibt, hat ein Java.util.Date-Objekt keine Zeitzone †. Die Implementierung von toString
NAME _ wendet jedoch die Standardzeitzone der JVM an, wenn die Zeichenfolgendarstellung dieses Datums-/Zeitwerts generiert wird. Für den naiven Programmierer ist es verwirrend, dass ein Datum eine Zeitzone hat , dies jedoch nicht.
Die Klassen Java.util.Date
, j.u.Calendar
und Java.text.SimpleDateFormat
, die mit Java gebündelt sind, sind bekanntermaßen problematisch. Vermeiden Sie sie. Verwenden Sie stattdessen eine der folgenden kompetenten Datums-/Zeitbibliotheken:
Java 8 bringt ein exzellentes neues Java.time. * Package , um die alten Java.util.Date/Calendar-Klassen zu ersetzen.
Das Abrufen der aktuellen Uhrzeit in UTC/GMT ist ein einfacher Einzeiler…
Instant instant = Instant.now();
Diese Instant
NAME _ Klasse ist der Grundbaustein in Java.time und repräsentiert einen Moment auf der Zeitachse in UTC mit einer Auflösung von Nanosekunden .
In Java 8 wird der aktuelle Moment nur mit einer Auflösung von bis zu Millisekunden erfasst. Java 9 bringt eine neue Implementierung von Clock
NAME _ erfasst den aktuellen Moment bis zur vollen Nanosekundenfähigkeit dieser Klasse, abhängig von der Fähigkeit der Clock-Hardware Ihres Host-Computers.
Die Methode toString
generiert eine String-Darstellung ihres Werts mit einem bestimmten ISO 8601-Format . Dieses Format gibt null, drei, sechs oder neun Ziffern aus ( Millisekunden , Mikrosekunden oder Nanosekunden =) ) nach Bedarf, um den Sekundenbruchteil darzustellen.
Wenn Sie eine flexiblere Formatierung oder andere zusätzliche Funktionen wünschen, wenden Sie für UTC selbst ( ZoneOffset.UTC
constant ) einen UTC-Offset von Null an, um ein = zu erhalten OffsetDateTime
NAME _ .
OffsetDateTime now = OffsetDateTime.now( ZoneOffset.UTC );
Dump to console ...
System.out.println( "now: " + now );
Beim Laufen ...
now: 2014-01-21T23:42:03.522Z
Die Java.time-Klassen werden durch JSR 310 definiert. Sie wurden von Joda-Time inspiriert, aber komplett neu gestaltet.
UPDATE: Das Joda-Time -Projekt, das sich jetzt im Wartungsmodus befindet, rät zur Migration auf die Java.time Klassen.
Mit der kostenlosen Open-Source-Bibliothek von Joda-Time eines Drittanbieters können Sie die aktuelle Uhrzeit in nur einer Codezeile abrufen.
Joda-Time hat die neuen Java.time. * -Klassen in Java 8 inspiriert, weist jedoch eine andere Architektur auf. Sie können Joda-Time in älteren Java-Versionen verwenden. Joda-Time arbeitet weiterhin in Java 8 und wird weiterhin aktiv gewartet (Stand 2014). Das Joda-Time-Team rät jedoch zur Migration auf Java.time.
System.out.println( "UTC/GMT date-time in ISO 8601 format: " + new org.joda.time.DateTime( org.joda.time.DateTimeZone.UTC ) );
Detaillierterer Beispielcode (Joda-Time 2.3)…
org.joda.time.DateTime now = new org.joda.time.DateTime(); // Default time zone.
org.joda.time.DateTime zulu = now.toDateTime( org.joda.time.DateTimeZone.UTC );
Dump to console ...
System.out.println( "Local time in ISO 8601 format: " + now );
System.out.println( "Same moment in UTC (Zulu): " + zulu );
Beim Laufen ...
Local time in ISO 8601 format: 2014-01-21T15:34:29.933-08:00
Same moment in UTC (Zulu): 2014-01-21T23:34:29.933Z
Weitere Beispiele für Zeitzonen-Code finden Sie unter my answer zu einer ähnlichen Frage.
Ich empfehle, dass Sie immer eine Zeitzone angeben, anstatt sich implizit auf die aktuelle Standardzeitzone der JVM zu verlassen (die sich jederzeit ändern kann!). Solches Vertrauen scheint eine häufige Ursache für Verwirrung und Fehler in der Datums- und Uhrzeitarbeit zu sein.
Übergeben Sie beim Aufruf von now()
die gewünschte/erwartete Zeitzone, die zugewiesen werden soll. Verwenden Sie die Klasse DateTimeZone
NAME _ .
DateTimeZone zoneMontréal = DateTimeZone.forID( "America/Montreal" );
DateTime now = DateTime.now( zoneMontréal );
Diese Klasse enthält eine - Konstante für die Zeitzone UTC .
DateTime now = DateTime.now( DateTimeZone.UTC );
Wenn Sie wirklich die aktuelle Standardzeitzone der JVM verwenden möchten, rufen Sie explizit auf, damit sich Ihr Code selbst dokumentiert.
DateTimeZone zoneDefault = DateTimeZone.getDefault();
Lesen Sie mehr über ISO 8601 Formate. Sowohl Java.time als auch Joda-Time verwenden die sinnvollen Formate dieses Standards als Standard für das Parsen und Generieren von Zeichenfolgen.
† Tatsächlich hat Java.util.Date eine Zeitzone, die tief unter den Schichten des Quellcodes verborgen ist. Aus praktischen Gründen wird diese Zeitzone ignoriert. Als Abkürzung sagen wir, dass Java.util.Date keine Zeitzone hat. Darüber hinaus ist diese vergrabene Zeitzone nicht diejenige, die von der Methode toString
von Date verwendet wird. Diese Methode verwendet die aktuelle Standardzeitzone der JVM. Umso mehr sollten Sie diese verwirrende Klasse vermeiden und sich an Joda-Time und Java.time halten.
Dies liefert definitiv UTC-Zeit: als String- und Date-Objekte!
static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
public static Date getUTCdatetimeAsDate() {
// note: doesn't check for null
return stringDateToDate(getUTCdatetimeAsString());
}
public static String getUTCdatetimeAsString() {
final SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
final String utcTime = sdf.format(new Date());
return utcTime;
}
public static Date stringDateToDate(String StrDate) {
Date dateToReturn = null;
SimpleDateFormat dateFormat = new SimpleDateFormat(DATEFORMAT);
try {
dateToReturn = (Date)dateFormat.parse(StrDate);
}
catch (ParseException e) {
e.printStackTrace();
}
return dateToReturn;
}
Calendar c = Calendar.getInstance();
System.out.println("current: "+c.getTime());
TimeZone z = c.getTimeZone();
int offset = z.getRawOffset();
if(z.inDaylightTime(new Date())){
offset = offset + z.getDSTSavings();
}
int offsetHrs = offset / 1000 / 60 / 60;
int offsetMins = offset / 1000 / 60 % 60;
System.out.println("offset: " + offsetHrs);
System.out.println("offset: " + offsetMins);
c.add(Calendar.HOUR_OF_DAY, (-offsetHrs));
c.add(Calendar.MINUTE, (-offsetMins));
System.out.println("GMT Time: "+c.getTime());
Eigentlich keine Zeit, aber seine Darstellung könnte geändert werden.
SimpleDateFormat f = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
f.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(f.format(new Date()));
Die Zeit ist an jedem Punkt der Erde gleich, aber unsere Wahrnehmung der Zeit kann je nach Standort unterschiedlich sein.
Dieser Code druckt die aktuelle Uhrzeit UTC.
import Java.text.ParseException;
import Java.text.SimpleDateFormat;
import Java.util.Date;
import Java.util.TimeZone;
public class Test
{
public static void main(final String[] args) throws ParseException
{
final SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
f.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(f.format(new Date()));
}
}
Ergebnis
2013-10-26 14:37:48 UTC
Kalender aGMTCalendar = Calendar.getInstance (TimeZone.getTimeZone ("GMT")); Dann werden alle mit dem aGMTCalendar-Objekt ausgeführten Vorgänge mit der GMT-Zeitzone ausgeführt und es wird keine Sommerzeit oder feste Offsets angewendet
Falsch!
Calendar aGMTCalendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
aGMTCalendar.getTime(); //or getTimeInMillis()
und
Calendar aNotGMTCalendar = Calendar.getInstance(TimeZone.getTimeZone("GMT-2"));aNotGMTCalendar.getTime();
wird gleich zurückkehren. Idem für
new Date(); //it's not GMT.
Dies funktioniert, um UTC Millisekunden in Android zu erhalten.
Calendar c = Calendar.getInstance();
int utcOffset = c.get(Calendar.ZONE_OFFSET) + c.get(Calendar.DST_OFFSET);
Long utcMilliseconds = c.getTimeInMillis() + utcOffset;
Jon Skeet fragt:
@ Downvoter: Möchtest du einen Kommentar abgeben? Was genau ist in meiner Antwort falsch? – Jon Skeet 26. Oktober 09 um 21:09
Ich bin nicht der Downvoter, aber in dieser Antwort scheint das falsch zu sein. Du sagtest:
Java.util.Date
ist immer in UTC. Was lässt Sie glauben, dass es in local .__ ist. Zeit? Ich vermute, das Problem ist, dass Sie es über eine .__ anzeigen. Instanz des Kalenders, der die lokale Zeitzone verwendet, oder möglicherweiseDate.toString()
, das auch die lokale Zeitzone verwendet.
Der Code:
System.out.println(new Java.util.Date().getHours() + " hours");
gibt die lokalen Stunden an, nicht GMT (UTC-Stunden), wobei keine Calendar
und keine SimpleDateFormat
verwendet wird.
Deshalb scheint etwas falsch zu sein.
Die Antworten zusammensetzen, der Code:
System.out.println(Calendar.getInstance(TimeZone.getTimeZone("GMT"))
.get(Calendar.HOUR_OF_DAY) + " Hours");
zeigt die GMT-Stunden anstelle der lokalen Stunden an. Beachten Sie, dass getTime.getHours()
fehlt, weil dadurch ein Date()
-Objekt erstellt würde, das das Datum theoretisch in GMT speichert, die Stunden in der lokalen Zeitzone jedoch zurückgibt.
Wenn Sie ein Date-Objekt mit UTC-angepassten Feldern haben möchten, können Sie dies mit Joda Time folgendermaßen tun:
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));
Sie können dies direkt verwenden
SimpleDateFormat dateFormatGmt = new SimpleDateFormat("dd:MM:yyyy HH:mm:ss");
dateFormatGmt.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(dateFormatGmt.format(new Date())+"");
SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MM-dd");
dateFormatGmt.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(dateFormatGmt.format(date));
Sie können verwenden:
Calendar aGMTCalendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
Dann werden alle mit dem aGMTCalendar-Objekt ausgeführten Vorgänge mit der GMT-Zeitzone ausgeführt und es wird keine Sommerzeit oder feste Offsets angewendet. Ich denke, das vorherige Poster ist richtig, dass das Date () - Objekt immer eine GMT zurückgibt. Erst wenn Sie etwas mit dem Date-Objekt tun, wird es in die lokale Zeitzone konvertiert.
Hier ein weiterer Vorschlag, um ein GMT-Zeitstempelobjekt 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));
}
Eine andere Möglichkeit, um 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());
Mit:
Calendar cal = Calendar.getInstance();
Dann haben cal
das aktuelle Datum und die aktuelle Uhrzeit.
Sie können das aktuelle Datum und die Uhrzeit für die Zeitzone auch erhalten mit:
Calendar cal2 = Calendar.getInstance(TimeZone.getTimeZone("GMT-2"));
Sie können cal.get(Calendar.DATE);
oder andere Kalenderkonstanten nach anderen Details fragen.
Datum und Zeitstempel werden in Java nicht mehr unterstützt. Kalenderklasse ist es nicht.
Konvertieren der aktuellen DateTime 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
Um dies zu vereinfachen, können Sie zur Erstellung einer Date
in UTC
Calendar
verwenden:
Calendar.getInstance(TimeZone.getTimeZone("UTC"));
Dadurch wird eine neue Instanz für Calendar
mithilfe der "UTC" TimeZone
erstellt.
Wenn Sie ein Date
-Objekt aus diesem Kalender benötigen, können Sie einfach getTime()
verwenden.
Beispielcode zum Rendern der Systemzeit in einer bestimmten Zeitzone und in einem bestimmten Format.
import Java.text.SimpleDateFormat;
import Java.util.Calendar;
import Java.util.Date;
import Java.util.TimeZone;
public class TimZoneTest {
public static void main (String[] args){
//<GMT><+/-><hour>:<minutes>
// Any screw up in this format, timezone defaults to GMT QUIETLY. So test your format a few times.
System.out.println(my_time_in("GMT-5:00", "MM/dd/yyyy HH:mm:ss") );
System.out.println(my_time_in("GMT+5:30", "'at' HH:mm a z 'on' MM/dd/yyyy"));
System.out.println("---------------------------------------------");
// Alternate format
System.out.println(my_time_in("America/Los_Angeles", "'at' HH:mm a z 'on' MM/dd/yyyy") );
System.out.println(my_time_in("America/Buenos_Aires", "'at' HH:mm a z 'on' MM/dd/yyyy") );
}
public static String my_time_in(String target_time_zone, String format){
TimeZone tz = TimeZone.getTimeZone(target_time_zone);
Date date = Calendar.getInstance().getTime();
SimpleDateFormat date_format_gmt = new SimpleDateFormat(format);
date_format_gmt.setTimeZone(tz);
return date_format_gmt.format(date);
}
}
Ausgabe
10/08/2011 21:07:21
at 07:37 AM GMT+05:30 on 10/09/2011
at 19:07 PM PDT on 10/08/2011
at 23:07 PM ART on 10/08/2011
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 es funktioniert für mich.
public static void main(String args[]){
LocalDate date=LocalDate.now();
System.out.println("Current date = "+date);
}
Das hat für mich funktioniert, liefert die Zeitmarke in GMT!
Date currDate;
SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
dateFormatGmt.setTimeZone(TimeZone.getTimeZone("GMT"));
SimpleDateFormat dateFormatLocal = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
long currTime = 0;
try {
currDate = dateFormatLocal.parse( dateFormatGmt.format(new Date()) );
currTime = currDate.getTime();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Wenn Sie vermeiden möchten, das Datum zu analysieren und nur einen Zeitstempel in GMT wünschen, können Sie Folgendes verwenden:
final Date gmt = new Timestamp(System.currentTimeMillis()
- Calendar.getInstance().getTimeZone()
.getOffset(System.currentTimeMillis()));
Verwenden Sie diese Klasse, um immer die richtige UTC-Zeit von einem Online NTP -Server zu erhalten:
import Java.net.DatagramPacket;
import Java.net.DatagramSocket;
import Java.net.InetAddress;
class NTP_UTC_Time
{
private static final String TAG = "SntpClient";
private static final int RECEIVE_TIME_OFFSET = 32;
private static final int TRANSMIT_TIME_OFFSET = 40;
private static final int NTP_PACKET_SIZE = 48;
private static final int NTP_PORT = 123;
private static final int NTP_MODE_CLIENT = 3;
private static final int NTP_VERSION = 3;
// Number of seconds between Jan 1, 1900 and Jan 1, 1970
// 70 years plus 17 leap days
private static final long OFFSET_1900_TO_1970 = ((365L * 70L) + 17L) * 24L * 60L * 60L;
private long mNtpTime;
public boolean requestTime(String Host, int timeout) {
try {
DatagramSocket socket = new DatagramSocket();
socket.setSoTimeout(timeout);
InetAddress address = InetAddress.getByName(Host);
byte[] buffer = new byte[NTP_PACKET_SIZE];
DatagramPacket request = new DatagramPacket(buffer, buffer.length, address, NTP_PORT);
buffer[0] = NTP_MODE_CLIENT | (NTP_VERSION << 3);
writeTimeStamp(buffer, TRANSMIT_TIME_OFFSET);
socket.send(request);
// read the response
DatagramPacket response = new DatagramPacket(buffer, buffer.length);
socket.receive(response);
socket.close();
mNtpTime = readTimeStamp(buffer, RECEIVE_TIME_OFFSET);
} catch (Exception e) {
// if (Config.LOGD) Log.d(TAG, "request time failed: " + e);
return false;
}
return true;
}
public long getNtpTime() {
return mNtpTime;
}
/**
* Reads an unsigned 32 bit big endian number from the given offset in the buffer.
*/
private long read32(byte[] buffer, int offset) {
byte b0 = buffer[offset];
byte b1 = buffer[offset+1];
byte b2 = buffer[offset+2];
byte b3 = buffer[offset+3];
// convert signed bytes to unsigned values
int i0 = ((b0 & 0x80) == 0x80 ? (b0 & 0x7F) + 0x80 : b0);
int i1 = ((b1 & 0x80) == 0x80 ? (b1 & 0x7F) + 0x80 : b1);
int i2 = ((b2 & 0x80) == 0x80 ? (b2 & 0x7F) + 0x80 : b2);
int i3 = ((b3 & 0x80) == 0x80 ? (b3 & 0x7F) + 0x80 : b3);
return ((long)i0 << 24) + ((long)i1 << 16) + ((long)i2 << 8) + (long)i3;
}
/**
* Reads the NTP time stamp at the given offset in the buffer and returns
* it as a system time (milliseconds since January 1, 1970).
*/
private long readTimeStamp(byte[] buffer, int offset) {
long seconds = read32(buffer, offset);
long fraction = read32(buffer, offset + 4);
return ((seconds - OFFSET_1900_TO_1970) * 1000) + ((fraction * 1000L) / 0x100000000L);
}
/**
* Writes 0 as NTP starttime stamp in the buffer. --> Then NTP returns Time OFFSET since 1900
*/
private void writeTimeStamp(byte[] buffer, int offset) {
int ofs = offset++;
for (int i=ofs;i<(ofs+8);i++)
buffer[i] = (byte)(0);
}
}
Und benutze es mit:
long now = 0;
NTP_UTC_Time client = new NTP_UTC_Time();
if (client.requestTime("pool.ntp.org", 2000)) {
now = client.getNtpTime();
}
Wenn Sie UTC-Zeit "jetzt" als DateTimeString-Funktion benötigen, verwenden Sie die Funktion:
private String get_UTC_Datetime_from_timestamp(long timeStamp){
try{
Calendar cal = Calendar.getInstance();
TimeZone tz = cal.getTimeZone();
int tzt = tz.getOffset(System.currentTimeMillis());
timeStamp -= tzt;
// DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",Locale.getDefault());
DateFormat sdf = new SimpleDateFormat();
Date netDate = (new Date(timeStamp));
return sdf.format(netDate);
}
catch(Exception ex){
return "";
}
}
und benutze es mit:
String UTC_DateTime = get_UTC_Datetime_from_timestamp(now);
Einfach gesagt: Ein Kalenderobjekt speichert Informationen zur Zeitzone, aber wenn Sie cal.getTime () ausführen, gehen die Informationen zur Zeitzone verloren. Für Zeitzonen-Konvertierungen empfehle ich daher DateFormat-Klassen zu verwenden ...
das ist meine Implementierung:
public static String GetCurrentTimeStamp()
{
Calendar cal=Calendar.getInstance();
long offset = cal.getTimeZone().getOffset(System.currentTimeMillis());//if you want in UTC else remove it .
return new Java.sql.Timestamp(System.currentTimeMillis()+offset).toString();
}
public class CurrentUtcDate
{
public static void main(String[] args) {
Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println("UTC Time is: " + dateFormat.format(date));
}
}
Ausgabe:
UTC Time is: 22-01-2018 13:14:35
Sie können das Datumsformat nach Bedarf ändern.
Wenn Sie joda time verwenden und die aktuelle Zeit in Millisekunden ohne Ihren lokalen Offset möchten, können Sie Folgendes verwenden:
long instant = DateTimeZone.UTC.getMillisKeepLocal(DateTimeZone.getDefault(), System.currentTimeMillis());
Verwenden Sie das Java.time-Paket und geben Sie den folgenden Code ein:
ZonedDateTime now = ZonedDateTime.now( ZoneOffset.UTC );
oder
LocalDateTime now2 = LocalDateTime.now( ZoneOffset.UTC );
je nach anwendung benötigen.
Aktuelles Datum in UTC
Instant.now().toString().replaceAll("T.*", "");