JDBC Timestamp & Date GMT questions
J'ai un JDBC colonne Date, si j'utilise la fonction getDate est d'obtenir le 'date' une partie seulement 02 Oct 2009 mais si j'utilise la méthode gettimestamp-je obtenir le plein 'date' 02 Oct 2009 13:56:78:890. C'est excatly ce que je veux.
Toutefois, le "date" retourné par la méthode gettimestamp 'ignore' EME des valeurs, supposons que la date; 02 Oct 2009 13:56:78:890, je finis par obtenir 02 Oct 2009 15:56:78:890
Ma date a été sauvée +2GMT date sur la base de données, mais le serveur d'application est à GMT-je.e 2h derrière
Comment pouvez toujours obtenir mon jour, 02 Oct 2009 13:56:78:890
Modifier
- Je obtenir la date du jour +2 sur le côté client qui est à GMT +2
OriginalL'auteur n002213f | 2009-10-02
Vous devez vous connecter pour publier un commentaire.
C'est la différence entre l'Horodatage et d'autres temporelle types de MySQL. Timestamp est enregistré sous Unix time_t en UTC, mais d'autres types de magasin de date/heure littéralement sans les informations de zone.
Lorsque vous appelez la méthode gettimestamp(), pilote JDBC MySQL convertit le temps de GMT dans le fuseau horaire par défaut si le type timestamp. Il n'effectue aucune conversion pour d'autres types.
Vous pouvez modifier le type de colonne ou de faire la conversion vous-même. Je recommande première approche.
Je suis confus, si la conversion fonctionne correctement, ne devrait-il pas voir une date qui est à 2 heures de moins, au lieu de plus?
vérifier mon montage et la réponse
c'était assez proche et qui m'a guidé vers ma dernière solution
OriginalL'auteur ZZ Coder
Vous devez être conscient que
java.util.Date
(et aussijava.sql.Date
etjava.sql.Timestamp
, qui sont des sous-classes dejava.util.Date
) ne sais rien sur les fuseaux horaires, ou plutôt, ils sont toujours en UTC.java.util.Date
et de ses sous-classes ne sont rien de plus qu'un conteneur pour un certain nombre de millisecondes depuis le 01-01-1970, 12:00 UTC" de la valeur.Affiche une date dans un fuseau horaire, la convertir en une chaîne à l'aide d'un
java.text.DateFormat
objet. Réglez le fuseau horaire sur l'objet en appelant lesetTimeZone()
méthode. Par exemple:OriginalL'auteur Jesper
J'ai rencontré un problème similaire l'autre jour, où le composant a été tronqué à partir de certaines dates.
Nous avons rétréci vers le bas à une différence dans Oracle versions de Pilote.
Sur Oracle FAQ il y a un article à ce sujet:
Avant 9201, ce sera le retour de:
getObject pour sysdate : java.sql.Timestamp <<<<
getDate pour sysdate : java.sql.Date
getTimetamp pour sysdate : java.sql.Timestamp
De 9201, le suivant sera retourné
getObject pour sysdate : java.sql.Date <<<<<
getDate pour sysdate :java.sql.Date >> pas de changement
getTimetamp pour sysdate :java.sql.Timestamp >> pas de changement
Remarque: java.sql.La Date n'a pas le temps alors que java.sql.Timestamp n'.
Avec ce changement dans le Type de données de la cartographie, une application échoue et/ou de générer des résultats incorrects lorsque le pilote JDBC est mis à niveau à partir 8i/9iR1 à 920x JBDC pilote.
Pour maintenir la compatibilité et de conserver les applications de travail après la mise à niveau, un indicateur de compatibilité n'a été Fournie. Les développeurs ont désormais quelques options:
Pilote JDBC de ne pas détecter la version de base de données par défaut. Pour modifier l'indicateur de compatibilité pour la manipulation de types de données TIMESTAMP, propriété de la connexion
'oracle.jdbc.V8Compatible'
peut être fixé à "true" et le conducteur se comporte comme il se comportait dans 8i, 901x, 9 200 (respect des Horodateurs).
Par défaut, l'indicateur est défini à 'false'. Dans OracleConnection constructeur le pilote obtient la version du serveur et définissez l'indicateur de compatibilité de façon appropriée.
Avec JDBC 10.1.0.x, au lieu de la connexion de la propriété, la propriété système suivante peut être utilisée: java -Doracle.jdbc.V8Compatible=true.....Remarque: Cet indicateur est un client seul drapeau qui régit l'heure et le Jour de la cartographie. Il n'affecte pas toutes les fonctionnalité de Base de données.
'2. Utiliser set/getDate et set/méthode gettimestamp lorsque vous traitez avec la Date et l'Horodatage de la colonne type de données en conséquence.
9i server prend en charge à la fois la Date et l'Horodatage types de colonne DATE est mappé à java.sql.La Date et l'HORODATAGE est mappé à java.sql.Timestamp.
Donc, pour ma situation, j'ai eu un code comme ceci:
Avec 9i j'ai été faire un java.sql.Timestamp (qui est une sous-classe de java.util.Date) donc, tout était super et j'ai eu mes heures et les minutes.
Mais avec 10g, le même code devient maintenant une java.sql.Date (également une sous-classe de java.util.Date de il encore la compile) mais le format HH:MM est TRONQUÉ!!.
La 2ème solution a été assez facile pour moi - il suffit de remplacer le getDate avec méthode gettimestamp et vous devriez être OK. Je suppose que c'était une mauvaise habitude.
OriginalL'auteur Jim P
De cette post je suis venu à la conclusion que JDBC ne récupérer le fuseau horaire pour le Timestamp (je ne pense pas que MS SQL prend en charge ce ainsi, la plupart des résultats de Google point d'Oracle)
Lorsque le JDBC méthode gettimestamp méthode est appelée, il ne reçoit que la 'millisecondes' partie et de créer un objet Date avec le serveur Fuseau horaire (GMT).
Lorsque cette Date objet est présenté à mon client qui est de +2 GMT, il ajoute 2 heures, ce qui est la norme de décalage qui conduit à des heures supplémentaires.
J'ai corrigé ce problème en supprimant le décalage dans le temps à partir de la date à laquelle j'ai récupérer c'est à dire de se convertir à la vraie Date GMT.
OriginalL'auteur n002213f
OriginalL'auteur Jayram