---
slug: "django-でdatetime-で-mysql-検索する時にタイムゾーンがずれてうまく検索できないミス"
title: "Django で、datetime で MySQL 検索する時にタイムゾーンがずれてうまく検索できないミス"
description: "けっこう何回もミスってしまうのでメモ。"
url: "https://www.ytyng.com/blog/django-でdatetime-で-mysql-検索する時にタイムゾーンがずれてうまく検索できないミス"
publish_date: "2017-01-26T04:11:07Z"
created: "2017-01-26T04:11:07Z"
updated: "2026-02-27T04:27:29.345Z"
categories: ["Django"]
keywords: ""
featured_image_url: "https://media.ytyng.com/resize/20230812/2d6565c871004ba88947c18f9ed10950.png.webp?width=768"
has_video: false
has_music: false
video_urls: []
music_urls: []
lang: "ja"
---

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

<p>けっこう何回もミスってしまうのでメモ。</p>
<p>settings</p>
<pre>TIME_ZONE = 'Asia/Tokyo'<br>USE_TZ = True</pre>
<p></p>
<pre>from django.utils import timezone<br><br>now = timezone.now()</pre>
<p></p>
<p>この now は、repr してみると</p>
<pre>datetime.datetime(2017, 1, 26, 4, 4, 56, 53007, tzinfo=&lt;UTC&gt;)</pre>
<p>UTC の datetime.</p>
<p>これはテンプレートで表示するとローカルタイムに直されるので、JST のように見える。が、見る瞬間に変換されているだけで、タイムゾーンはUTC。</p>
<p>これを、</p>
<pre>now.date()</pre>
<p>なんかで date を取り出して、MySQL の(JSTで格納されている)日付フィールドと比較すると、9時間ずれておかしなことになる。</p>
<p>なので、date を使いたいとか、Python コード内で strftime して使いたいとかの理由があれば、</p>
<pre>from django.utils import timezone<br><br>now = timezone.localtime(timezone.now())</pre>
<p>として localtime 化しておけば、</p>
<pre>datetime.datetime(2017, 1, 26, 13, 4, 56, 53007, tzinfo=&lt;DstTzInfo 'Asia/Tokyo' JST+9:00:00 STD&gt;)</pre>
<p>このように JST のタイムゾーンがついた datetime になるので使い勝手が良い。</p>
<p></p>
