Maison  >  Article  >  Java  >  Comment convertir un horodatage de n’importe quel fuseau horaire en GMT en Java ?

Comment convertir un horodatage de n’importe quel fuseau horaire en GMT en Java ?

DDD
DDDoriginal
2024-11-12 08:19:02468parcourir

How to Convert a Timestamp From Any TimeZone to GMT in Java?

Comment gérer les fuseaux horaires du calendrier à l'aide de Java

Question :

Vous avez un horodatage de votre application qui peut provenir de n’importe quel fuseau horaire. Cependant, les données doivent être envoyées à un WebService qui suppose qu'elles sont toujours en GMT. Vous devez convertir l'heure de saisie de l'utilisateur de son fuseau horaire local en GMT à son insu.

Réponse :

La gestion du fuseau horaire de Java peut prêter à confusion. Alors que les horodatages sont généralement stockés en GMT, la classe Calendar utilise par défaut le fuseau horaire actuel du système. Pour relever ce défi, considérez ce qui suit :

import java.util.Calendar;
import java.util.TimeZone;

public class ConvertTimeZone {

    public static void main(String[] args) {
        // Example input time (EST)
        Calendar input = Calendar.getInstance(TimeZone.getTimeZone("EST"));
        input.set(2008, Calendar.MAY, 1, 18, 12, 0);

        // Create a Calendar in GMT
        Calendar gmt = convertToGmt(input);

        // Output the converted time (GMT)
        System.out.println(gmt.getTime()); // 2008-05-01 11:12:00 GMT
    }

    public static Calendar convertToGmt(Calendar cal) {
        Date date = cal.getTime();
        TimeZone tz = cal.getTimeZone();

        long msFromEpochGmt = date.getTime(); // Convert to milliseconds since epoch in GMT
        int offsetFromUTC = tz.getOffset(msFromEpochGmt);

        // Create a new Calendar in GMT and adjust for the offset
        Calendar gmtCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
        gmtCal.setTime(date);
        gmtCal.add(Calendar.MILLISECOND, offsetFromUTC);

        return gmtCal;
    }
}

Ce code suit les étapes suivantes :

  1. Obtient l'heure actuelle dans le fuseau horaire local de l'utilisateur en tant qu'objet Calendrier.
  2. Crée un nouvel objet Calendrier en GMT.
  3. Calcule le décalage entre le fuseau horaire local de l'utilisateur et GMT.
  4. Ajuste le calendrier GMT en ajoutant le décalage à l'heure de l'utilisateur.
  5. L'objet Calendrier résultant représente désormais la même heure en GMT, quel que soit le fuseau horaire de l'utilisateur.

En utilisant cette approche, vous pouvez convertir avec précision l'heure de saisie de l'utilisateur de n'importe quel fuseau horaire en GMT, garantissant ainsi la compatibilité des données avec le WebService.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn