Maison >Java >javaDidacticiel >Pourquoi mon code Java affiche-t-il une heure incorrecte lors de la conversion vers un fuseau horaire spécifique, et comment puis-je y remédier ?
Conversion de la date et de l'heure en fuseau horaire spécifique en Java
Pour tenter de convertir la date et l'heure actuelles du système en un fuseau horaire spécifique, vous a rencontré un écart entre le résultat attendu et l'heure réelle dans le fuseau horaire souhaité. Pour résoudre ce problème, nous examinerons le code que vous avez fourni et identifierons les causes potentielles du décalage horaire.
Le code utilise les classes Calendar et SimpleDateFormat pour gérer les opérations de date et d'heure. Vous définissez l’heure actuelle sur currentdate et la formatez sous forme de chaîne à l’aide de l’objet formateur. Ensuite, vous créez un objet TimeZone pour le fuseau horaire cible (CST dans votre cas) et le définissez comme fuseau horaire pour le formateur. Enfin, vous analysez la chaîne de date formatée pour obtenir la date résultante dans le fuseau horaire spécifié.
L'écart survient car le formateur formate la date dans le fuseau horaire local avant de la convertir dans le fuseau horaire cible. Pour tenir compte de cela, vous devez ajuster explicitement l'heure en ajoutant ou en soustrayant la différence de décalage entre le fuseau horaire local et le fuseau horaire cible.
Voici un extrait de code mis à jour qui devrait fournir la conversion d'heure correcte :
<code class="java">// Create a calendar and set it to the local timezone Calendar calendar = Calendar.getInstance(); TimeZone fromTimeZone = calendar.getTimeZone(); // Create a calendar for the target timezone TimeZone toTimeZone = TimeZone.getTimeZone("CST"); // Convert the current time to the local timezone calendar.setTimeZone(fromTimeZone); calendar.add(Calendar.MILLISECOND, fromTimeZone.getRawOffset() * -1); if (fromTimeZone.inDaylightTime(calendar.getTime())) { calendar.add(Calendar.MILLISECOND, calendar.getTimeZone().getDSTSavings() * -1); } // Convert the time to the target timezone calendar.add(Calendar.MILLISECOND, toTimeZone.getRawOffset()); if (toTimeZone.inDaylightTime(calendar.getTime())) { calendar.add(Calendar.MILLISECOND, toTimeZone.getDSTSavings()); } // Get the final date and time in the target timezone Date theResult = calendar.getTime(); System.out.println("The current time in India is :: " + currentdate.getTime()); System.out.println("The date and time in :: " + toTimeZone.getDisplayName() + " is ::" + theResult);</code>
En ajustant l'heure en fonction des décalages horaires, vous devriez maintenant obtenir la date et l'heure correctes dans le fuseau horaire spécifié.
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!