重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

Windows XP に XAMPP をインストールし、PHPとSQLiteでページを作成しているのですが、 SQLite のタイムゾーンの取り扱いで不可解な点があるのでお教え願います。

「UPDATE xxx SET AA='AA', UDate='2010-11-21 19:15:10' WHERE ID= '321'」というSQLを実行すると、SQLiteには UDate がタイムゾーン分の時間が遅れて記録されます。 当然「UDate='2010-11-21 19:15:10'」は、SQL実行時の時間です。
SQLiteの確認は、firefoxのツール・SQLite Manager v0.65 です。

Windows XPのタイムゾーンはJST-9で合っているし、時計の時間は合っています。
PHP には「date_default_timezone_set( 'Asia/Tokyo' ); 」を記述しているので間違いはないと思います。


実は「UPDATE xxx SET AA='AA', UDate=CURRENT_TIMESTAMP WHERE ID= '321'」を実行した時に、同じように時間がずれたので「CURRENT_TIMESTAMP」が理由だと思い PHP でタイムスタンプを作ってSQLを実行しても同じようにずれたの SQLite の仕様なのかな? と思っていますが、気持ちが悪いので正しく入力できる方法があれば直したいと思っています。

宜しくお願いします。

A 回答 (2件)

時刻関係のdefaultは、GMTを返すようです。


フォーマット関数で localtime を指定すれば、サーバーOS設定の現地時間になります。
select strftime("%Y-%m-%d %H:%M:%S",CURRENT_TIMESTAMP, 'localtime')
http://opengroup.org/onlinepubs/007908799/xsh/st …

この回答への補足

ご回答頂いたように「UPDATE xxx SET AA='AA', UDate=CURRENT_TIMESTAMP WHERE ID= '321'」を下記のように書き換えて無事に時計と同じ時間でdbに記録されるようになりました。
>UPDATE xxx SET AA='AA', UDate=datetime( 'now', 'localtime' ) WHERE ID= '321'

ご指摘頂いたように「localtime」の不足でした。


ありがとうございます。

補足日時:2010/11/27 08:27
    • good
    • 0
この回答へのお礼

>時刻関係のdefaultは、GMTを返すようです。
御回答ありがとうございます。

御回答頂き、調べ直してみると御指摘のように「localtime」という記述が抜けているようです。 プログラムを訂正して確認してみます m(_ _)m

お礼日時:2010/11/24 17:39

No1回答したものです。


参考サイトurlを間違えました済みません、SQLite構文解説はこっちです。
http://www.sqlite.org/lang_datefunc.html
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!