0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Django】タイムゾーンを標準ライブラリのみでローカルタイムへ変換する

Last updated at Posted at 2018-02-17

Python 3.6.3
Django 1.11.6

背景

Pythonのdatetime.datetimeはnaive(タイムゾーン情報を持っていない)とaware(タイムゾーン情報を持っている)の2種類に区別されます。

今回はタイトルの通り、タイムゾーンが東京になっていない箇所をどうやったらローカルタイムへ変換できるのかまとめました。

その場合、タイムゾーン情報をsettings.pyから参照して変換したい!という方には参考になるかと思います。
自分もハマったので忘備録として残します。

答え

utils.py
# 動作確認していないので実用性は低いです
from django.utils import timezone

datetime.astimezone(tz=None)

Noneとするとタイムゾーン情報がなくなりsettings.pyのtimezone情報から参照して変換してくれます。

終わりに

Pythonのタイムゾーン変換でググるとその場でtzinfoに+9hしたものが多く、苦労しました。
それとPythonでのタイムゾーン変換はpytzが有名らしいですが、

Qiita記事
Python3のdatetimeはタイムゾーンを指定するだけで高速になる

上記の記事を見るとpytzは読み込みが遅いらしい。

pytzを使用せず、標準ライブラリのみでどうにかできないか試行錯誤した結果こうなりました。

参考

Pythonでdatetimeにtzinfoを付与するのにreplaceを使ってはいけない
Convert a python UTC datetime to a local datetime using only python standard library?

How to make an unaware datetime timezone aware in python

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?