Je dois stocker la date et l'heure UTC dans la base de données.
J'ai converti le dateTime donné dans un fuseau horaire spécifique en UTC. Pour cela, j'ai suivi le code ci-dessous.
Mon entrée dateTime est "20121225 10:00:00 Z" timezone est "Asia/Calcutta".
Mon serveur/DB (oracle) fonctionne dans le même fuseau horaire (IST) "Asie/Calcutta".
Obtenir l'objet Date dans ce fuseau horaire spécifique
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()));
Stocker dans la base de données
if (tsSchedStartTime != null) {
stmt.setTimestamp(11, tsSchedStartTime);
} else {
stmt.setNull(11, java.sql.Types.DATE);
}
SORTIE
DB (oracle) a stocké la même donnée dateTime: "20121225 10:00:00
pas en UTC.
J'ai confirmé à partir du sql ci-dessous.
select to_char(sched_start_time, 'yyyy/mm/dd hh24:mi:ss') from myTable
Mon serveur de base de données fonctionne également sur le même fuseau horaire "Asia/Calcutta".
Il me donne les apparitions ci-dessous
-
Date.getTime()
n'est pas en UTC - Ou le timestamp a un impact sur le fuseau horaire lors du stockage dans la base de données. Qu'est-ce que je fais de mal ici ?
Une dernière question :
Will timeStamp.toString()
imprimer dans le fuseau horaire local comme java.util.date
fait ? Pas l'UTC ?