Django で、datetime で MySQL 検索する時にタイムゾーンがずれてうまく検索できないミス

(コメント)

けっこう何回もミスってしまうのでメモ。

settings

TIME_ZONE = 'Asia/Tokyo'
USE_TZ = True

from django.utils import timezone

now = timezone.now()

この now は、repr してみると

datetime.datetime(2017, 1, 26, 4, 4, 56, 53007, tzinfo=<UTC>)

UTC の datetime.

これはテンプレートで表示するとローカルタイムに直されるので、JST のように見える。が、見る瞬間に変換されているだけで、タイムゾーンはUTC。

これを、

now.date()

なんかで date を取り出して、MySQL の(JSTで格納されている)日付フィールドと比較すると、9時間ずれておかしなことになる。

なので、date を使いたいとか、Python コード内で strftime して使いたいとかの理由があれば、

from django.utils import timezone

now = timezone.localtime(timezone.now())

として localtime 化しておけば、

datetime.datetime(2017, 1, 26, 13, 4, 56, 53007, tzinfo=<DstTzInfo 'Asia/Tokyo' JST+9:00:00 STD>)

このように JST のタイムゾーンがついた datetime になるので使い勝手が良い。

現在の評価: 4

コメント

最近のツイート

  • ytyng

    ytyng @ytyng

    俺もスタバアプリにログインできないよ
    1 ヶ月, 2 週間 前

  • 安藤拓郎 Takuro Ando

    安藤拓郎 Takuro Ando @takuroando

    ytyng

    これまでいろんなグッズを作ってきたけど、今回は「お米」と聞いて買うしかないなと。今夜の夕食はコシヒカリ!箸もセットだし^^ https://t.co/01ucQx9qtw #腰乃展 #マンガ展 https://t.co/4VL2vOe0Og
    1 ヶ月, 4 週間 前

  • ytyng

    ytyng @ytyng

    講談社さんとやった全部入り電子書籍セットがギネスブックに登録されたよー https://t.co/rbkd3IYub0
    1 ヶ月, 4 週間 前