J'ai posté une question plus tôt aujourd'hui alors que je ne m'étais pas vraiment concentré sur le problème. Je serai capable d'être plus concis ici. Je cours RoR 2.1.2, sur Windows, avec MySQL. Le fuseau horaire natif du serveur SQL est UTC. Mon fuseau horaire local est du Pacifique (-0800)Les scripts autonomes Ruby on Rails et Active Record sont en désaccord sur les valeurs de la base de données pour: timestamps
J'ai un modèle avec: colonne de type d'horodatage que je peux faire des choses comme ça avec:
record = Record.find(:first)
record.the_time = Time.now()
Quand je fais un « select * from enregistrements » dans la base de données, l'heure indiquée est de huit heures avant mon heure locale, ce qui est correct, étant donné que la base de données est sur UTC. (J'ai vérifié qu'il est 'think in utc' avec un simple 'select now()' et 'select utc_timestamp()')
C'est là que le problème commence. Si j'affiche l'heure dans une vue:
<%= h record.the_time %>
... puis je récupère l'heure correcte, affichée au format UTC. Si j'écrivais dans la base de données à 16:40:00 heure locale, la base de données indiquait 00:40:00.
Cependant, si je suis en cours d'exécution d'un script autonome:
record = Record.find(:first)
puts record.the_time
... je reviens l'heure UTC que je stockées dans la base (0:40:00), mais avec le fuseau horaire local :
Wed Nov 26 00:40:00 (-0800) 2008
... une distorsion temporelle de huit heures. Pourquoi est-ce que le fait de stocker le temps le traduit correctement, mais ne le récupère pas? Si je compare un temps passé du passé récent dans la base de données et que je le compare à l'heure actuelle, l'heure actuelle est moins longue - me disant que ce n'est pas seulement un problème de conversion de chaîne.
Des idées?