2012-09-11 4 views
0

J'ai une colonne de type DATE dans ma base de données Oracle. 06.09.12 est l'une des valeurs stockées ici. J'ai également une entité EJB mappée à la table, qui a un champ membre "date" de type java.util.Date. Cependant, la méthode getter renvoie la date stockée dans la table plus un jour, e. g. 07.09.12 au lieu du 06.09.12. Comment puis-je obtenir exactement la date stockée? Dois-je envisager d'utiliser Timestamp?Oracle Date et EJB Date

+0

comment êtes-vous retreiving la date de DB? –

+1

est-ce que la date dans la BD imite le fuseau horaire? (Quelle est la valeur NLS_DATE_FORMAT?). Quelle est la valeur user-timezone sur la machine sur laquelle vous exécutez le code java? – aviad

+0

Merci, le problème était lié à différents fuseaux horaires – gisly

Répondre

2

Vous pouvez avoir des fuseaux horaires différents - le fuseau horaire de la base de données est différent du fuseau horaire défini en Java. L'heure sous-jacente est en fait la même, mais, par exemple, la date sur la base de données est interprétée en GMT et Java en heure de l'Est. Après minuit à GMT, GMT est en avance d'un jour pendant environ 7 heures.

Ces deux fuseaux horaires sont définis par défaut sur le fuseau horaire du serveur, mais peuvent être remplacés par l'installation de la base de données et la machine virtuelle Java.

Pour vérifier si tel est le cas, sur Oracle:

select dbtimezone,sessiontimezone from dual; 

Et sur Java:

TimeZone tz = Calendar.getInstance().getTimeZone(); 
System.out.println("TimeZone: "+tz.getDisplayName());