des problèmes avec Java heure d'été

J'ai une application Java qui doit être au courant de l'heure de la zone. Quand je prends une époque Unix temps et d'essayer de le convertir en un timestamp à utiliser pour un Oracle SQL appel, le bon fuseau horaire, mais le fuseau horaire "useDaylightTime" la valeur n'est pas correcte, c'est à dire, il est actuellement de retour "vrai", quand nous ne sommes PAS en heure d'été (je suis en Floride dans la TZ "America/New_York").

C'est en cours d'exécution sur Red Hat Linux Enterprise 6, et autant que je peux dire, c' est correctement mis en place pour le fuseau horaire, par exemple, 'date' retourne:
Mer Nov 28 12:30:12 HNE 2012

Je peux aussi voir, à l'aide de la "zdump de" l'utilité, que la valeur actuelle 'isdst' est de 0.

Ma version de Java est 1.6.0_31.

J'ai Googlé ça, et vu les nombreux problèmes que cela a causé, mais beaucoup d'entre eux tout simplement dire à l'ensemble de la TZ manuellement, mais mon problème n'est pas le TZ, mais le fait que par défaut, la TZ est la "isDaylight" la valeur "true". Je crois que c'est à l'origine de ma requête pour renvoyer des données qui est d'une heure (je peux voir qu'il est).

Ici est un simple morceau de code que j'ai pour essayer de reproduire ce de la manière la plus simple possible:

public class TZdefault {

    public static void main(String[] args) throws IOException {

            long startTime = System.currentTimeMillis()/1000;

            Calendar start = Calendar.getInstance();
            start.setTimeInMillis(startTime);

            start.setTimeZone(TimeZone.getDefault());

            System.out.println("Start UTC: " + start + "ms: " + start.getTimeInMillis());
            System.out.println("use daylight: " + start.getTimeZone().useDaylightTime());

    } //end main


}  //end class

Une dernière chose. Si dans mon code que j'ai mis le TZ pour "EST", c'est bien évidemment ne retour d'un TZ avec "isDaylight' à la valeur False. Mais ce n'est pas une bonne solution.

Je voulais ajouter un peu plus de détail que j'avais été en espérant pour se cacher.

J'ai des enregistrements dans une base de données Oracle 11g que l'utilisation d'HORODATAGE avec le FUSEAU horaire champs. Je suis tout simplement faire des requêtes JDBC où deux des paramètres à l'aide de ENTRE un horodatage de départ et de fin d'horodatage.

Quand j'ai une requête à cette table, je suis à l'aide d'une requête préparée qui est à l'aide d'une entrée de Calendrier, dont le seul but était d'essayer de manipuler le fuseau horaire. La ligne de fond est que je suis en train de faire un pstmt.setTimestamp() appel à l'aide de la " getTimeInMillis méthode pour le début et la fin de temps après le "défaut" de fuseau horaire a été appliquée. La sortie du journal montre qu'en fait, c'est de mettre dans le bon millisecondes, mais le retour sur SQL résultats sont clairement hors d'une heure exactement!

Je suis encore à essayer de vérifier qu'il n'est pas une question sur l'insertion de données secondaires ainsi.

Mais j'ai beaucoup d'informations de débogage, et il semble que je fais une demande pour le bon moment dans ma requête JDBC.

  • Pourquoi avez-vous diviser par 1000 lorsque vous affectez la startTime variable (le setTimeInMillis()` méthode attend un temps en ms)?
  • C'était un "oups".
InformationsquelleAutor mitchmcc | 2012-11-28