it-swarm.com.de

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

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?

405
Behrang

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.

365
Jon Skeet
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()) );
262
Dan

tl; dr

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

Einzelheiten

Wie die richtige Antwort von Jon Skeet angibt, hat ein Java.util.Date-Objekt keine Zeitzone . Die Implementierung von toStringNAME _ 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.time (Java 8)

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 InstantNAME _ 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 ClockNAME _ 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 toStringgeneriert 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 OffsetDateTimeNAME _ .

OffsetDateTime now = OffsetDateTime.now( ZoneOffset.UTC );

Dump to console ...

System.out.println( "now: " + now );

Beim Laufen ...

now: 2014-01-21T23:42:03.522Z

Table of types of date-time classes in modern Java.time versus legacy.

Die Java.time-Klassen werden durch JSR 310 definiert. Sie wurden von Joda-Time inspiriert, aber komplett neu gestaltet.

Joda-Zeit

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.

Zeitzone

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 DateTimeZoneNAME _ .

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();

ISO 8601

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 toStringvon 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.

249
Basil Bourque

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;
}
77
    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());
65
Ahmad Nadeem

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.

49
Antonio

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
15
Adam

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.
15
simpatico

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;
12
moberme

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öglicherweise Date.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.

10
Dana Wilson

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));
7
huljas

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())+"");
6
nithinreddy
SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MM-dd");
dateFormatGmt.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(dateFormatGmt.format(date));
6
Justin

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.

6
mjh2007

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));
}
5
Rene

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());
5
shahtapa

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.

5
user2427

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
3
My God

Um dies zu vereinfachen, können Sie zur Erstellung einer Date in UTCCalendar 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.

3
Ovidiu Latcu

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
3
so_mv

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.

3
Ashallar
public static void main(String args[]){
    LocalDate date=LocalDate.now();  
    System.out.println("Current date = "+date);
}
2
Arjun Singh

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();
    }
2
Bogdan

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);
1
Ingo

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 ...

1
Hitesh

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();    
}
1
Gal Rom
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.

0
santoshlokhande

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());
0
Managarm

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.

0
Asif

Aktuelles Datum in UTC

Instant.now().toString().replaceAll("T.*", "");
0
Arefe