Conversión de fecha y hora a alguna otra zona horaria en Java

Resuelto Shantanu Tomar asked hace 12 años • 12 respuestas

He escrito este código para convertir la fecha y hora actuales del sistema a otra zona horaria. No recibo ningún error, pero no obtengo el resultado esperado. Como si ejecutara mi programa en un momento determinado. Mi salida es::

La hora actual en India es ::Fri Feb 24 16:09:23 IST 2012

La fecha y hora en :: Hora estándar central es ::Sat Feb 25 03:39:23 IST 2012

Y la hora real según la zona horaria CST es::

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

Entonces hay una brecha de tiempo . y no sé por qué sucede esto. Cualquier ayuda será apreciada. El código es::

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();
        }
    }
}
Shantanu Tomar avatar Feb 24 '12 17:02 Shantanu Tomar
Aceptado

Está a través de la web. Podría haber buscado en Google. De todos modos, aquí tienes una versión (seleccionada y modificada descaradamente desde aquí ):

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());
Nishant avatar Feb 24 '2012 11:02 Nishant

Tu error es llamar parseen lugar de format.

Llama parsepara analizar una fecha a partir de una cadena, pero en su caso tiene una fecha y necesita formatearla usando la zona horaria correcta.

Reemplace su código con

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

y espero que obtenga el resultado que espera.

Oleg Mikheev avatar Feb 24 '2012 11:02 Oleg Mikheev