Maison >Java >javaDidacticiel >Comment puis-je convertir avec précision des objets date/heure Java entre les fuseaux horaires ?

Comment puis-je convertir avec précision des objets date/heure Java entre les fuseaux horaires ?

DDD
DDDoriginal
2024-11-28 11:14:15638parcourir

How Can I Accurately Convert Java Date/Time Objects Between Time Zones?

Conversion de la date/heure vers un fuseau horaire spécifique en Java

Problème :

Conversion d'une date et d'une heure à partir de passer d'un fuseau horaire à un autre peut être difficile en Java. Le code fourni par l'utilisateur pour convertir l'heure actuelle de GMT en GMT 13 semble simple, mais la même approche échoue lors du réglage d'une heure spécifique. L'utilisateur se demande pourquoi le fuseau horaire de la machine locale est utilisé dans de tels cas.

Solution :

La confusion vient du fait que lors de la création d'un nouvel objet Date sans fuseau horaire explicite, l'heure est supposée être en UTC. Cependant, lors de la définition de l'heure sur un objet Calendrier en millisecondes (comme dans calendrier.setTime(new Date(1317816735000L))), l'hypothèse est que l'heure se trouve dans le fuseau horaire de la machine hôte.

Pour pour surmonter ce problème, vous pouvez définir explicitement le fuseau horaire de l'objet SimpleDateFormat avant de formater l'heure :

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date(1317816735000L));
SimpleDateFormat sdf = new SimpleDateFormat("dd MMM yyyy HH:mm:ss z");

// Set the time zone for the formatter
sdf.setTimeZone(TimeZone.getTimeZone("GMT+13"));

// Format the time with the specified time zone
String newZealandTime = sdf.format(calendar.getTime());

Ce code renverra la date dans le fuseau horaire spécifié (GMT 13) sous forme de chaîne.

Étapes pour la conversion date/heure personnalisée :

  1. Créez un objet Calendrier et définissez l'heure et date.
  2. Spécifiez le fuseau horaire initial à l'aide de sdf.setTimeZone(TimeZone.getTimeZone("GMT")).
  3. Formatez l'heure à l'aide de sdf.format(calendar.getTime()).
  4. Définissez le fuseau horaire souhaité sur l'objet SimpleDateFormat en utilisant sdf.setTimeZone(TimeZone.getTimeZone("GMT 13")).
  5. Reformatez l'heure en utilisant le nouveau fuseau horaire pour obtenir la valeur convertie.

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