La mise en œuvre sous-jacente de Date
et Calendar
les deux utilisent le même système: un représentant long
millisecondes depuis le 1er Janvier 1970, 00:00:00 GMT. Voir Here pour Date
(lignes 136 & 168) et HERE pour Calendar
(ligne 778)
Donc cela nous arrive à ceci:
cal.setTimeInMillis(inputDate.getTime());
// this gets the long from the Date and puts it into the Calendar
// nothing is changed, you only get added functionality
// even if you change the Timezone this only affects how it is displayed
cal.set(Calendar.MILLISECOND, 0);
// the long is modified by setting the that represents only milliseconds to zero
inputDate = cal.getTime();
//the long is stored in a Date and returned
Vous rentreras un objet Date
peu modifié. Sans la seconde instruction, il n'y aurait aucun changement. Cela explique pourquoi rien n'est converti, mais pas pourquoi la sélection ne fonctionne pas. D'après l'information que vous avez donnée, il semble qu'il y ait une discordance dans les fuseaux horaires de la trinité de la DB, de la JVM et de votre système. Quelque chose dans la ligne de ceci: votre système est réglé sur IST et votre JVM interprète en quelque sorte l'heure de votre système comme GMT. Pour vérifier cela, vous pouvez exécuter System.out.println(new Date())
. S'il écrit le fuseau horaire comme GTM mais que les chiffres sont les mêmes que ceux de votre horloge système (IST), alors c'est votre problème.
Vous pouvez également consulter:
- font les horodatages d'un match de déclaration d'insertion avec ce qui arrive dans la base de données
- faire les horodatées d'une entrée de la base de données correspond à celui que vous recevez après un select
De quel fuseau horaire utilise la base de données? – Dawnkeeper
Lorsque j'ai exécuté "select dbtimezone from dual", il a donné "+00: 00" – user2902067
Ok. Que faites-vous exactement? Insérer dans la base de données? Sélection à partir de DB? Et comment (comme dans 'exemple de code')? – Dawnkeeper