Comment puis-je obtenir la date et l'heure actuelles en UTC ou GMT en Java?


Vous voulez améliorer ce post? Fournissez des réponses détaillées à cette question, y compris des citations et une explication de la raison pour laquelle votre réponse est correcte. Les réponses sans suffisamment de détails peuvent être modifiées ou supprimées.

Quand je crée un nouveau Date objet, il est initialisé à l'heure actuelle mais dans le fuseau horaire local. Comment puis-je obtenir la date et l'heure actuelles en GMT?

Author: Michael Mrozek, 2008-11-21

30 answers

java.util.Date n'a pas de fuseau horaire spécifique, bien que sa valeur soit le plus souvent considérée par rapport à UTC. Ce qui vous fait penser que c'est dans l'heure locale?

Pour être précis: la valeur dans un java.util.Date est le nombre de millisecondes depuis l'époque Unix, qui s'est produite à minuit le 1er janvier 1970, UTC. La même époque pourrait également être décrite dans d'autres fuseaux horaires, mais la description traditionnelle est en termes d'UTC. Comme c'est un certain nombre de millisecondes depuis une époque fixe, la valeur dans java.util.Date est la même dans le monde entier à un instant particulier, quel que soit le fuseau horaire local.

Je soupçonne que le problème est que vous l'affichez via une instance de Calendar qui utilise le fuseau horaire local, ou éventuellement en utilisant Date.toString() qui utilise également le fuseau horaire local, ou une instance SimpleDateFormat, qui, par défaut, utilise également le fuseau horaire local.

Si ce n'est pas le problème, veuillez poster un exemple de code.

Je recommanderais cependant d'utiliser Joda-Time de toute façon, ce qui offre beaucoup plus claire de l'API.

 425
Author: Jon Skeet, 2015-01-02 20:00:21

Tl; dr

Instant.now()   // Capture the current moment in UTC. 

Générez une chaîne pour représenter cette valeur:

Instant.now().toString()  

2016-09-13T23:30:52.123 Z

Détails

Comme la bonne réponse de Jon Skeet a déclaré, un java.util.L'objet Date n'a aucun fuseau horaire. Mais son toString l'implémentation applique le fuseau horaire par défaut de la JVM lors de la génération de la représentation de chaîne de cette valeur date-heure. Confusément au programmeur naïf, une date semble avoir un fuseau horaire mais pas.

Le java.util.Date, j.u.Calendar, et java.text.SimpleDateFormat les classes fournies avec Java sont notoirement gênantes. Évitez-les. Au lieu de cela, utilisez l'une de ces bibliothèques date-heure compétentes:

Java.temps (Java 8)

Java 8 apporte une excellente nouvelle java.temps.* paquet pour remplacer l'ancien Java.util.Classes de date/Calendrier.

Obtenir l'heure actuelle en UTC / GMT est un simple one-liner {

Instant instant = Instant.now();

, ce Qui Instant la classe est le bloc de construction de base en java.temps, représentant un moment sur la timeline en UTC avec une résolution de nanosecondes .

Dans Java 8, le moment actuel est capturé avec une résolution allant jusqu'à quelques millisecondes. Java 9) apporte une nouvelle mise en œuvre de Clock capture le moment actuel dans jusqu' à la capacité nanoseconde complète de cette classe, en fonction de la capacité du matériel d'horloge de votre ordinateur hôte.

Sa méthode toStringgénère une représentation de chaîne de sa valeur en utilisant un format ISO 8601 spécifique. Ce format sorties zéro, trois, six ou neuf chiffres chiffres (millisecondes, microsecondes, ou nanosecondes) comme nécessaire pour représenter la fraction de seconde.

Si vous voulez un formatage plus flexible, ou autre fonctionnalités supplémentaires, puis appliquez un décalage par rapport à UTC de zéro, pour UTC lui-même (ZoneOffset.UTC constante ) pour obtenir un OffsetDateTime.

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

Vidage sur console {

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

Lors de l'exécution...

now.toString(): 2014-01-21T23:42:03.522Z

Tableau des types date-heure en Java, modernes et hérités.


À propos de java.temps

Le java.temps framework est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciennes héritées classes date-heure gênantes telles que java.util.Date, Calendar, & SimpleDateFormat.

Pour en savoir plus, voir le Tutoriel Oracle. Et rechercher Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 310.

Le Joda-Temps le projet, maintenant en mode de maintenance, conseille la migration vers le java.temps classes.

, Vous pouvez échanger java.temps objets directement avec votre base de données. Utiliser un pilote JDBC compatible avec JDBC 4.2 ou version ultérieure. Pas besoin de chaînes, pas besoin de classes java.sql.*.

Où obtenir le java.les classes de temps?

Table dont java.bibliothèque de temps à utiliser avec quelle version de Java ou Android

Le Trois-Extra le projet étend java.temps avec des cours supplémentaires. Ce projet est un terrain d'essai pour d'éventuels ajouts futurs à java.temps. Vous pouvez trouver quelques classes utiles ici comme Interval, YearWeek, YearQuarter, et plus.


Joda-Temps

MISE À JOUR: Le projetJoda-Time , maintenant en modemaintenance , conseille la migration vers le java.temps classes.

En utilisant la bibliothèque open source gratuiteJoda-Time 3rd-party, vous pouvez obtenir la date-heure actuelle en une seule ligne de code.

Joda-Le temps a inspiré le nouveau java.temps.* classes en Java 8, mais a une architecture différente. Vous pouvez utiliser Joda-Time dans les anciennes versions de Java. Joda-Time continue de fonctionner en Java 8 et continue d'être activement maintenu (à partir de 2014). Cependant, l'équipe Joda-Time conseille la migration vers java.temps.

System.out.println( "UTC/GMT date-time in ISO 8601 format: " + new org.joda.time.DateTime( org.joda.time.DateTimeZone.UTC ) );

Exemple de code plus détaillé (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 );

Vidage sur console {

System.out.println( "Local time in ISO 8601 format: " + now );
System.out.println( "Same moment in UTC (Zulu): " + zulu );

Lors de l'exécution...

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

Pour plus d'exemple de code faisant le travail de fuseau horaire, voir ma réponse à une question similaire.

Fuseau horaire

Je vous recommande de toujours spécifier un fuseau horaire plutôt que s'appuyant implicitement sur le fuseau horaire actuel par défaut de la JVM (qui peut changer à tout moment!). Une telle confiance semble être une cause fréquente de confusion et de bugs dans le travail date-heure.

Lorsque vous appelez now() passez le fuseau horaire souhaité/attendu à attribuer. L'utilisation de la DateTimeZone classe.

DateTimeZone zoneMontréal = DateTimeZone.forID( "America/Montreal" );
DateTime now = DateTime.now( zoneMontréal );

Cette classe contient une constante pour le fuseau horaire UTC.

DateTime now = DateTime.now( DateTimeZone.UTC );

Si vous voulez vraiment utiliser le fuseau horaire par défaut actuel de la JVM, faites un appel explicite pour que votre code soit l'auto-documentation.

DateTimeZone zoneDefault = DateTimeZone.getDefault();

ISO 8601

Lisez à propos des formats ISO 8601. Les deux java.time et Joda-Time utilisent les formats sensibles de cette norme comme valeurs par défaut pour l'analyse et la génération de chaînes.


en Fait, java.util.Date a-t-il un fuseau horaire, enfoui profondément sous des couches de code source. Pour la plupart des raisons pratiques, ce fuseau horaire est ignoré. Donc, comme raccourci, nous disons java.util.La date n'a pas de fuseau horaire. En outre, que le fuseau horaire enterré est et non celui utilisé par la méthode Date toString; cette méthode utilise le fuseau horaire par défaut actuel de la JVM. Raison de plus pour éviter cette classe confuse et rester avec Joda-Time et java.temps.

 377
Author: Basil Bourque, 2020-05-06 14:58:34
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()) );
 275
Author: Dan, 2010-03-27 07:08:23

Cela renvoie définitivement UTC time: en tant qu'objets String et Date !

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;
}
 86
Author: Someone Somewhere, 2019-02-19 11:10:25
    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());
 66
Author: Ahmad Nadeem, 2012-05-10 05:20:14

En fait pas le temps, mais sa représentation pourrait être modifiée.

SimpleDateFormat f = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
f.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(f.format(new Date()));

Le temps est le même en tout point de la Terre, mais notre perception du temps pourrait être différente selon l'emplacement.

 56
Author: Antonio, 2014-04-25 06:33:08

Calendrier aGMTCalendar = Calendrier.getInstance (fuseau horaire.getTimeZone ("GMT")); Ensuite, toutes les opérations effectuées à l'aide de l'objet aGMTCalendar seront effectuées avec le fuseau horaire GMT et l'heure d'été ou les décalages fixes ne seront pas appliqués

Faux!

Calendar aGMTCalendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
aGMTCalendar.getTime(); //or getTimeInMillis()

Et

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

Retournera en même temps. Idem pour

new Date(); //it's not GMT.
 18
Author: simpatico, 2012-02-10 09:19:52

Cela fonctionne pour obtenir des millisecondes UTC dans Android.

Calendar c = Calendar.getInstance();
int utcOffset = c.get(Calendar.ZONE_OFFSET) + c.get(Calendar.DST_OFFSET);  
Long utcMilliseconds = c.getTimeInMillis() + utcOffset;
 17
Author: moberme, 2013-05-16 19:35:11

Ce code affiche l'heure actuelle 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()));
    }
}

Résultat

2013-10-26 14:37:48 UTC
 17
Author: Adam, 2013-10-26 14:39:47

Voici ce qui semble être incorrect dans La réponse de Jon Skeet. Il a dit:

java.util.Date est toujours en UTC. Ce qui vous fait penser que c'est en local de temps? Je soupçonne que le problème est que vous l'affichez via un instance de Calendar qui utilise le fuseau horaire local, ou éventuellement en utilisant Date.toString(), qui utilise également le fuseau horaire local.

Cependant, le code:

System.out.println(new java.util.Date().getHours() + " hours");

Donne les heures locales, pas GMT( heures UTC), en utilisant no Calendar et no SimpleDateFormat à tout.

C'est pourquoi il semble que quelque chose soit incorrect.

En rassemblant les réponses, le code:

System.out.println(Calendar.getInstance(TimeZone.getTimeZone("GMT"))
                           .get(Calendar.HOUR_OF_DAY) + " Hours");

Affiche les heures GMT au lieu des heures locales note notez que getTime.getHours() est manquant car cela créerait un objet Date(), qui stocke théoriquement la date en GMT, mais restitue les heures dans le fuseau horaire local.

 10
Author: Dana Wilson, 2019-03-04 08:48:16

Vous pouvez utiliser:

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

Ensuite, toutes les opérations effectuées à l'aide de l'objet aGMTCalendar seront effectuées avec le fuseau horaire GMT et l'heure d'été ou les décalages fixes ne seront pas appliqués. Je pense que l'affiche précédente est correcte que l'objet Date() renvoie toujours un GMT ce n'est que lorsque vous allez faire quelque chose avec l'objet date qu'il est converti en fuseau horaire local.

 7
Author: mjh2007, 2010-01-26 16:32:00

Si vous voulez un objet Date avec des champs ajustés pour UTC, vous pouvez le faire comme ceci avec Joda Time :

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
Author: huljas, 2012-05-04 10:51:55
SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MM-dd");
dateFormatGmt.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(dateFormatGmt.format(date));
 6
Author: Justin, 2012-01-20 11:52:47

Voici mon implémentation de toUTC:

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

Il y a probablement plusieurs façons de l'améliorer, mais cela fonctionne pour moi.

 6
Author: Ashallar, 2016-08-31 15:10:16

, Vous pouvez directement utiliser ce

SimpleDateFormat dateFormatGmt = new SimpleDateFormat("dd:MM:yyyy HH:mm:ss");
dateFormatGmt.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(dateFormatGmt.format(new Date())+"");
 6
Author: nithinreddy, 2017-01-17 05:35:37

Avec:

Calendar cal = Calendar.getInstance();

Puis cal ont la date et l'heure actuelles.
Vous pouvez également obtenir la date et l'heure actuelles pour le fuseau horaire avec:

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

Vous pouvez demander cal.get(Calendar.DATE); ou une autre constante de calendrier sur les autres détails.
La date et l'horodatage sont obsolètes en Java. Classe de calendrier ce n'est pas le cas.

 5
Author: user2427, 2008-11-21 13:10:06

Voici une autre suggestion pour obtenir un objet horodatage GMT:

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
Author: Rene, 2012-05-09 10:34:25

Voici une autre façon d'obtenir l'heure GMT au format Chaîne

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
Author: shahtapa, 2012-10-01 04:29:56

Exemple de code pour rendre l'heure du système dans un fuseau horaire spécifique et un format spécifique.

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

}

Sortie

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
Author: so_mv, 2011-10-09 02:12:40

Juste pour que cela soit plus simple, pour créer un Date dans UTC vous pouvez utiliser Calendar :

Calendar.getInstance(TimeZone.getTimeZone("UTC"));

Qui construira une nouvelle instance pour Calendar en utilisant le "UTC" TimeZone.

Si vous avez besoin d'un Date objet de ce calendrier vous pouvez simplement utiliser getTime().

 3
Author: Ovidiu Latcu, 2012-05-17 13:04:37

Conversion du DateTime actuel en 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
Author: My God, 2014-01-08 13:08:38

Cela a fonctionné pour moi, renvoie l'horodatage en 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
Author: Bogdan, 2013-03-25 12:46:16

Utilisez cette classe pour obtenir la bonne heure UTC à partir d'un serveur NTP en ligne:

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

}

Et l'utiliser avec:

        long now = 0;

        NTP_UTC_Time client = new NTP_UTC_Time();

        if (client.requestTime("pool.ntp.org", 2000)) {              
          now = client.getNtpTime();
        }

Si vous avez besoin de l'heure UTC "maintenant" comme DateTimeString, utilisez la fonction:

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 "";
     }
    } 

Et l'utiliser avec:

String UTC_DateTime = get_UTC_Datetime_from_timestamp(now);
 2
Author: Ingo, 2014-07-30 22:14:00
public static void main(String args[]){
    LocalDate date=LocalDate.now();  
    System.out.println("Current date = "+date);
}
 2
Author: Arjun Singh, 2016-10-19 11:21:44

Pour faire simple. Un objet calendrier stocke des informations sur le fuseau horaire mais lorsque vous effectuez cal.getTime() alors les informations du fuseau horaire seront perdues. Donc, pour les conversions de fuseau horaire, je conseillerai d'utiliser les classes DateFormat...

 1
Author: Hitesh, 2012-12-05 08:21:38

Ceci est mon implémentation:

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
Author: Gal Rom, 2014-05-27 05:52:42

Si vous voulez éviter d'analyser la date et que vous voulez juste un horodatage en GMT, vous pouvez utiliser:

final Date gmt = new Timestamp(System.currentTimeMillis()
            - Calendar.getInstance().getTimeZone()
                    .getOffset(System.currentTimeMillis()));
 1
Author: Matthias van der Vlies, 2015-08-11 06:55:04
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));
    }
}

Sortie:

UTC Time is: 22-01-2018 13:14:35

Vous pouvez modifier le format de la date si nécessaire.

 1
Author: santoshlokhande, 2018-07-04 03:51:06

Si vous utilisez joda temps et que vous voulez l'heure actuelle en millisecondes sans votre le décalage, vous pouvez utiliser ceci:

long instant = DateTimeZone.UTC.getMillisKeepLocal(DateTimeZone.getDefault(), System.currentTimeMillis());
 0
Author: Managarm, 2015-07-08 11:38:24

Date actuelle dans l'UTC

Instant.now().toString().replaceAll("T.*", "");
 0
Author: Arefe, 2019-03-04 07:52:52