Tengo que almacenar UTC dateTime en DB.
He convertido el dateTime dado en una zona horaria específica a UTC. para eso seguí el siguiente código.
Mi fecha y hora de entrada es "20121225 10:00:00 Z" La zona horaria es "Asia / Calcuta"
Mi servidor / DB (Oracle) se está ejecutando en la misma zona horaria (IST) "Asia / Calcutta"
Obtenga el objeto Date en esta zona horaria específica
String date = "20121225 10:00:00 Z";
String timeZoneId = "Asia/Calcutta";
TimeZone timeZone = TimeZone.getTimeZone(timeZoneId);
DateFormat dateFormatLocal = new SimpleDateFormat("yyyyMMdd HH:mm:ss z");
//This date object is given time and given timezone
java.util.Date parsedDate = dateFormatLocal.parse(date + " "
+ timeZone.getDisplayName(false, TimeZone.SHORT));
if (timeZone.inDaylightTime(parsedDate)) {
// We need to re-parse because we don't know if the date
// is DST until it is parsed...
parsedDate = dateFormatLocal.parse(date + " "
+ timeZone.getDisplayName(true, TimeZone.SHORT));
}
//assigning to the java.sql.TimeStamp instace variable
obj.setTsSchedStartTime(new java.sql.Timestamp(parsedDate.getTime()));
Almacenar en DB
if (tsSchedStartTime != null) {
stmt.setTimestamp(11, tsSchedStartTime);
} else {
stmt.setNull(11, java.sql.Types.DATE);
}
SALIDA
DB (Oracle) ha almacenado lo mismo dado que dateTime: "20121225 10:00:00
no está en UTC.
Lo he confirmado desde el siguiente sql.
select to_char(sched_start_time, 'yyyy/mm/dd hh24:mi:ss') from myTable
Mi servidor de base de datos también se ejecuta en la misma zona horaria "Asia / Calcuta"
Me da las siguientes apariencias
Date.getTime()
no está en UTC- O bien, la marca de tiempo tiene un impacto en la zona horaria mientras se almacena en la base de datos. ¿Qué estoy haciendo mal aquí?
Una pregunta más:
¿Se timeStamp.toString()
imprimirá en la zona horaria local como java.util.date
hace? ¿No es UTC?