私は今日、問題にあまり焦点を当てていなかったときに質問を投稿しました。ここでもっと簡潔に話せるようになります。
MySQL を使用して Windows で RoR 2.1.2 を実行しています。SQL サーバーのネイティブ タイム ゾーンは UTC です。私のローカル タイムゾーンは太平洋 (-0800) です
私は次のようなことができる :timestamp タイプの列を持つモデルを持っています:
record = Record.find(:first)
record.the_time = Time.now()
データベースで「select * from records」を実行すると、DB が UTC であることを考えると、表示される時刻は現地時間の 8 時間前になります。(単純な「select now()」と「select utc_timestamp()」で「utcで考えている」ことを確認しました)
ここからトラブルが始まります。ビューに時間を表示する場合:
<%= h record.the_time %>
...その後、UTC 形式で表示された正しい時刻が返されます。現地時間の 16:40:00 にデータベースに書き込んだ場合、データベースは 00:40:00 を示しました。
ただし、スタンドアロン スクリプトを実行している場合:
record = Record.find(:first)
puts record.the_time
...次に、データベースに保存した UTC 時刻 (00:40:00) を取得しますが、ローカル タイムゾーンを使用します。
Wed Nov 26 00:40:00 (-0800) 2008
...8時間のタイムワープ。時刻を保存すると正しく変換されるのに、取得すると正しく変換されないのはなぜですか? DB に保存されている最近の時間を比較して現在の時間と比較すると、現在の時間が短くなります。これは単なる文字列変換の問題ではないことがわかります。
何か案は?