web-dev-qa-db-fra.com

Convertir l'heure locale en UTC et vice versa

Je travaille sur Android, et je veux convertir l'heure locale (heure de l'appareil) en UTC et l'enregistrer dans la base de données. Après l'avoir récupérée de la base de données, je dois la convertir à nouveau et l'afficher dans le fuseau horaire de l'appareil. Quelqu'un peut-il suggérer comment procéder en Java?

17
Dyo

J'ai converti l'heure locale en GMT/UTC et vice versa en utilisant ces deux méthodes et cela fonctionne très bien sans aucun problème pour moi.

public static Date localToGMT() {
    Date date = new Date();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
    Date gmt = new Date(sdf.format(date));
    return gmt;
}

passez la date GMT/UTC que vous souhaitez convertir en heure locale de l'appareil à cette méthode:

public static Date gmttoLocalDate(Date date) {

    String timeZone = Calendar.getInstance().getTimeZone().getID();
    Date local = new Date(date.getTime() + TimeZone.getTimeZone(timeZone).getOffset(date.getTime()));
    return local
}
23
Dyo

Une version simplifiée et condensée de la réponse acceptée:

public static Date dateFromUTC(Date date){
    return new Date(date.getTime() + Calendar.getInstance().getTimeZone().getOffset(date.getTime()));
}

public static Date dateToUTC(Date date){
    return new Date(date.getTime() - Calendar.getInstance().getTimeZone().getOffset(date.getTime()));
}
13
Chris Stillwell

Essaye ça:
// convertir au format UTC au format local

 public Date getUTCToLocalDate(String date) {
            Date inputDate = new Date();
            if (date != null && !date.isEmpty()) {
                @SuppressLint("SimpleDateFormat") SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
                simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
                try {
                    inputDate = simpleDateFormat.parse(date);
                } catch (ParseException e) {
                    e.printStackTrace();
                }
            }
            return inputDate;
        }  

// convertir la date locale en UTC

public String getLocalToUTCDate(Date date) {
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    calendar.setTimeZone(TimeZone.getTimeZone("UTC"));
    Date time = calendar.getTime();
    @SuppressLint("SimpleDateFormat") SimpleDateFormat outputFmt = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
    outputFmt.setTimeZone(TimeZone.getTimeZone("UTC"));
    return outputFmt.format(time);
}
3
Neelesh Atale

vous pouvez essayer quelque chose comme ceci à insérer dans DB:

    SimpleDateFormat f = new SimpleDateFormat("h:mm a E zz");
    f.setTimeZone(TimeZone.getTimeZone("UTC"));
    System.out.println(f.format(new Date()));
    String dd = f.format(new Date());

Cette option de votre commentaire:

SORTIE:

1:43 PM lun UTC

Pour cela, -> reconvertissez-le et affichez-le dans le temps de l'appareil

MISE À JOUR:

String dd = f.format(new Date());

        Date date = null;
        DateFormat sdf = new SimpleDateFormat("h:mm a E zz");
        try {
            date = sdf.parse(dd);
        }catch (Exception e){

        }
        sdf.setTimeZone(TimeZone.getTimeZone("Asia/Kolkata"));
        System.out.println(sdf.format(date));

SORTIE:

7:30 PM lun GMT + 05: 30

U peut s'afficher comme ceci.

2
User Learning

Time.getCurrentTimezone()

vous obtiendrez le fuseau horaire et

Calendar c = Calendar.getInstance(); int seconds = c.get(Calendar.SECOND)

vous obtiendrez le temps en UTC en quelques secondes. Bien sûr, vous pouvez modifier la valeur pour l'obtenir dans une autre unité.

1
der_Fidelis

Obtenez l'UTC actuel:

public String getCurrentUTC(){
        Date time = Calendar.getInstance().getTime();
        SimpleDateFormat outputFmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        outputFmt.setTimeZone(TimeZone.getTimeZone("UTC"));
        return outputFmt.format(time);
}
0
SANAT