Conversion de date et d'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 n'obtiens pas ma sortie comme prévu. Comme si j'exécute mon programme à un moment donné.. Ma sortie est::

Les Inde est :: Fri Feb 24 16:09:23 IST 2012

La date et l'heure :: , Heure normale du centre est :: Sat Feb 25 03:39:23 IST 2012

Et l'heure réelle selon CST fuseau horaire est ::

Friday, 24 February 4:39:16 a.m(GMT - 6:00)

Donc il y a quelques intervalle de temps . et je ne sais pas pourquoi ce qui se passe. 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();
        }
    }
}
Author: Suganthan Madhavan Pillai, 2012-02-24

6 answers

C'est sur le web. Pourrait avoir googlé. Quoi qu'il en soit, voici une version pour vous (choisie sans vergogne et modifiée à partir de 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());
 17
Author: Nishant, 2017-12-15 09:37:54

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 bon Fuseau horaire.

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 la sortie que vous attendez.

 8
Author: Oleg Mikheev, 2012-02-24 11:05:16

Gérer les dates en Java dans mon travail quotidien est une tâche non triviale. Je vous suggère d'utiliser Joda-Time qui simplifient notre codage jours et vous n'avez pas à "réinventer la roue".

 4
Author: Dario, 2017-12-15 09:40:03

Essayez quelque chose comme ça

Date date = new Date();
String formatPattern = ....;
SimpleDateFormat sdf = new SimpleDateFormat(formatPattern);

TimeZone T1;
TimeZone T2;

// set the Calendar of sdf to timezone T1
sdf.setTimeZone(T1);
System.out.println(sdf.format(date));

// set the Calendar of sdf to timezone T2
sdf.setTimeZone(T2);
System.out.println(sdf.format(date));

// Use the 'calOfT2' instance-methods to get specific info
// about the time-of-day for date 'date' in timezone T2.
Calendar calOfT2 = sdf.getCalendar();
 1
Author: Kunal GUpta, 2014-10-14 11:55:55

Vous pouvez simplement utiliser "CST6CDT" parce que dans certains pays, ils suivent CDT en été et 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
Author: Pratik Sinha, 2017-03-31 07:03:57

Le problème est que lorsque vous imprimez la date obj, il appelle la méthode toString et il imprimera dans le fuseau horaire par défaut de vos machines. 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
Author: Abhishek bhutra, 2017-12-15 09:42:46