2017-09-22 4 views
0

J'ai un client Java qui insère (via un fichier CSV et 'LOAD DATA INFILE') des horodatages (type TIMESTAMP) au format UTC dans une base de données MySQL. Le fuseau horaire de mon serveur est "America/New_York" et je dois conserver les informations sur l'heure d'été. Le 5 novembre à 2h00 du matin, le temps passe d'EDT à EST et les horloges sont décalées d'une heure à 1h00 du matin. Ainsi, le 5 novembre à 1 h 30, par exemple, arrive deux fois; une fois en EDT et une fois en EST.Insérer un horodatage UTC dans MySQL - fuseau horaire de l'heure d'été

Comment faire en sorte que le serveur fasse la distinction entre les deux? Par exemple, si je veux insérer '2017-11-05 01:30:00' EDT, est-il un moyen de dire à MySQL de faire la différence entre '2017-11-05 01:30:00' EDT (avant la changement d'heure) et '2017-11-05 01:30:00' EST (après le changement d'heure) quand j'insère des valeurs? Mon application Java contient les informations de fuseau horaire des deux horodatages si cela est important. Je souhaite que le fuseau horaire global du serveur soit "America/New_York", car les utilisateurs accèdent à ces données et les affichent dans leur heure locale. La solution à laquelle je pensais était de régler le fuseau horaire de la connexion à UTC depuis le client Java, d'insérer les valeurs en UTC, puis de réinitialiser le fuseau horaire de la connexion, mais je voulais savoir s'il y avait un meilleur, plus 'standard' Solution.

+0

Si la valeur est en UTC, il n'y a pas d'ambiguïté de l'heure d'été. «2017-11-05T01: 30 EDT» est la même que «2017-11-05T05: 30 UTC» et «2017-11-05T01: 30: 00 EST» est «2017-11-05T06: 30 UTC». –

+0

Je sais. Ma question est, j'ai 2 timestamps en Java. L'un est '2017-11-05 01:30:00' EDT et l'autre est '2017-11-05 01:30:00' EST. Comment puis-je insérer les deux dans le champ MySQL de type TIMESTAMP, qui est UTC? Ai-je besoin de les convertir en UTC en Java, puis de les insérer, ou y a-t-il un meilleur moyen? –

+0

Quand vous dites * timestamp *, voulez-vous dire un 'java.sql.Timestamp' ou un autre type? –

Répondre

0

utilisation jodaTime api avec newYork ou fuseau horaire de l'Est http://joda-time.sourceforge.net/timezones.html Why this Joda offset cannot get daylightsaving right

+0

Bien qu'une API géniale, Joda-Time est en mode maintenance et est remplacée par les nouvelles API. Même dans le [site web de joda] (http://www.joda.org/joda-time), on peut lire: ** "Notez que Joda-Time est considéré comme un projet en grande partie" fini ", aucune amélioration majeure n'est prévue. en utilisant Java SE 8, veuillez migrer vers java.time (JSR-310). "** - Quoi qu'il en soit, OP dit qu'il utilise' ZonedDateTime' (Java 8), donc il n'y a vraiment aucune raison d'utiliser Joda-Time. –