web-dev-qa-db-fra.com

Conversion de date et heure en un autre fuseau horaire en java

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();
        }
    }
}
8
Shantanu Tomar

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());
19
Nishant

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.

8
Oleg Mikheev

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".

4
Dario

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;
     }
1
Pratik Sinha

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);
1
Abhishek bhutra