Convertir joda.temps.DateTime pour java.sql.Date et conserver fuseau horaire

J'ai le scénario suivant:

  • De contrôle de Swing qui renvoie un Calendar objet
  • Intermédiaire DateTime objet que j'utilise pour faire lourd de la date/heure de manipulation (joda)
  • Connexion de base de données (OraclePreparedStatement) qui ne prend java.sql.Date objet

Mon problème est que le Calendar et DateTime les objets sont correctement l'affichage de la date en GMT (qui je veux), mais quand je convertir java.sql.Date afin de les envoyer à la base de données, la date est convertie en le fuseau horaire local.

Par exemple:

  • Calendar et DateTime sont 2012-08-13T23:59:59.000 Z (GMT)
  • Résultant java.sql.Date est 2012-08-14 (local incorrect UTC+2 date)

Ci-dessous le code que j'utilise pour faire la conversion.

DateTime dateGmt = new DateTime(calendarGmt.getTimeInMillis(), DateTimeZone.UTC);
java.sql.Date sqlDate = new java.sql.Date(dateGmt.getMillis());

Je ne sais pas comment créer un java.sql.Date objet tout en conservant le fuseau horaire correct. Il est également tout à fait possible que je suis en train de faire une conversion incorrecte.

OriginalL'auteur Justin Skiles | 2012-08-13