j'ai écrit ce code pour convertir la date et l'heure actuelles du système en un autre fuseau horaire. Je ne reçois aucune erreur mais je ne reçois pas mon résultat comme prévu. Comme si j'exécutais mon programme à un moment donné .. Ma sortie est ::
L'heure actuelle dans Inde est :: Fri Feb 24 16:09:23 IST 2012
La date et l'heure en :: Heure normale du Centre est :: Sat Feb 25 03:39:23 IST 2012
Et l’heure réelle selon le fuseau horaire CST est ::
Friday, 24 February 4:39:16 a.m(GMT - 6:00)
Il y a donc un décalage horaire . et je ne sais pas pourquoi cela se produit. Toute aide sera appréciée. Le code est ::
package MyPackage;
import Java.text.DateFormat;
import Java.text.ParseException;
import Java.text.SimpleDateFormat;
import Java.util.Calendar;
import Java.util.Date;
import Java.util.TimeZone;
public class Temp2 {
public static void main(String[] args) {
try {
Calendar currentdate = Calendar.getInstance();
String strdate = null;
DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
strdate = formatter.format(currentdate.getTime());
TimeZone obj = TimeZone.getTimeZone("CST");
formatter.setTimeZone(obj);
//System.out.println(strdate);
//System.out.println(formatter.parse(strdate));
Date theResult = formatter.parse(strdate);
System.out.println("The current time in India is :: " +currentdate.getTime());
System.out.println("The date and time in :: "+ obj.getDisplayName() + "is ::" + theResult);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
C'est sur le web. Aurait pu googlé. Quoi qu'il en soit, voici une version pour vous (choisi sans vergogne et modifié depuis ici ):
Calendar calendar = Calendar.getInstance();
TimeZone fromTimeZone = calendar.getTimeZone();
TimeZone toTimeZone = TimeZone.getTimeZone("CST");
calendar.setTimeZone(fromTimeZone);
calendar.add(Calendar.MILLISECOND, fromTimeZone.getRawOffset() * -1);
if (fromTimeZone.inDaylightTime(calendar.getTime())) {
calendar.add(Calendar.MILLISECOND, calendar.getTimeZone().getDSTSavings() * -1);
}
calendar.add(Calendar.MILLISECOND, toTimeZone.getRawOffset());
if (toTimeZone.inDaylightTime(calendar.getTime())) {
calendar.add(Calendar.MILLISECOND, toTimeZone.getDSTSavings());
}
System.out.println(calendar.getTime());
Votre erreur est d'appeler parse
au lieu de format
.
Vous appelez parse
pour analyser une date à partir d'une chaîne, mais dans votre cas, vous avez une date et devez la formater en utilisant le fuseau horaire correct.
Remplacez votre code par
Calendar currentdate = Calendar.getInstance();
DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
TimeZone obj = TimeZone.getTimeZone("CST");
formatter.setTimeZone(obj);
System.out.println("Local:: " +currentdate.getTime());
System.out.println("CST:: "+ formatter.format(currentdate.getTime())
et j'espère que vous obtiendrez le résultat que vous attendez.
La gestion des dates en Java dans mon travail quotidien est une tâche non triviale. Je vous suggère d'utiliser Joda-Time qui simplifie nos jours de codage et vous n'avez pas à "réinventer la roue".
Vous pouvez simplement utiliser "CST6CDT" Dans certains pays, ils suivent la TAC en été et la CST en hiver
public static String getDateInCST() {
Calendar calendar = Calendar.getInstance();
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
formatter.setTimeZone(TimeZone.getTimeZone( "CST6CDT"));
String strdate = formatter.format(calendar.getTime());
TimeZone.getAvailableIDs();
return strdate;
}
Le problème est que lorsque vous imprimez la date, appelez la méthode toString
et elle sera imprimée dans le fuseau horaire par défaut de votre machine. Essayez ce code et voyez la différence.
Calendar currentdate = Calendar.getInstance();
String strdate = null;
DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ssz");
strdate = formatter.format(currentdate.getTime());
System.out.println("strdate=>" + strdate);
TimeZone obj = TimeZone.getTimeZone("CST");
formatter.setTimeZone(obj);
strdate = formatter.format(currentdate.getTime());
Date theResult = formatter.parse(strdate);
System.out.println("The current time in India is :: " +currentdate.getTime());
System.out.println("The date and time in :: " + obj.getDisplayName() + "is ::" + theResult);
System.out.println("The date and time in :: " + obj.getDisplayName() + "is ::" + strdate);