Conversión de fecha y hora a alguna otra zona horaria en Java
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();
}
}
}
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());
Tu error es llamar parse
en lugar de format
.
Llama parse
para 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.