python datetimeタイムゾーン変換
5093 ワード
From:http://www.dannysite.com/blog/122/
Python標準ライブラリにおけるdatetimeモジュールは、日付と時間に関する様々な処理方法を提供している。本論文の主題から、まずdatetimeで提供されたutcnow()方法を利用して、現在のUTC時間まで取得する。
1
2
3
4
1
2
1
2
1
2
3
4
5
6
7
8
Python標準ライブラリにおけるdatetimeモジュールは、日付と時間に関する様々な処理方法を提供している。本論文の主題から、まずdatetimeで提供されたutcnow()方法を利用して、現在のUTC時間まで取得する。
1
2
3
4
>>>
import
datetime
>>> utc_now
=
datetime.datetime.utcnow()
>>> utc_now
datetime.datetime(
2013
,
12
,
4
,
15
,
43
,
21
,
872000
)
その時のtzinfoはnoneである:1
2
>>> utc_now.tzinfo
>>>
国際タイムゾーンに関連する場合、タイムゾーン変換は、先のUTC時間をローカル時間に変換しようとするなど、頻繁に使われます。Python 3.3+バージョンについては、こうすることができます。1
2
>>> utc_now.replace(tzinfo
=
datetime.timezone.utc).astimezone(tz
=
None
)
datetime.datetime(
2013
,
12
,
4
,
23
,
43
,
21
,
872000
, tzinfo
=
datetime.timezone(datetime.timedelta(
0
,
28800
),
' '
))
しかし、この方法は不便そうです。特に他のタイムゾーンを変える時に。もっと低いバージョンのPythonに対しては、datetime.timezoneはまだ根っこをおさえていないかもしれません。したがって、より便利な方法は、サードパーティパッケージを使って実現することである。1
2
3
4
5
6
7
8
>>>
from
pytz
import
timezone
>>> utc_now.tzinfo
>>> tzchina
=
timezone(
'Asia/Chongqing'
)
>>> tzchina
'Asia/Chongqing'
LMT
+
7
:
06
:
00
STD>
>>> utc
=
timezone(
'UTC'
)
>>> utc_now.replace(tzinfo
=
utc).astimezone(tzchina)
datetime.datetime(
2013
,
12
,
4
,
23
,
43
,
21
,
872000
, tzinfo
=
'Asia/Chongqing'
CST
+
8
:
00
:
00
STD>)
のタイムゾーンに するには、これを します。
にとって、タイムゾーンの り えは にDjangoに れています。UTC を に する があります。Django もこの を してくれていますので、 の はもっと です。
1
2
3
4
5>>>
from
django.utils.timezone
import
utc
>>>
from
django.utils.timezone
import
localtime
>>> now
=
datetime.datetime.utcnow().replace(tzinfo
=
utc)
>>> localtime(now)
datetime.datetime(
2013
,
12
,
5
,
0
,
3
,
13
,
122000
, tzinfo
=
'Asia/Shanghai'
CST
+
8
:
00
:
00
STD>)
Pythonでタイムゾーンを り える はまだたくさんあります。 することによってもっといい が つかるかもしれません。
from pytz import timezone
def datetime_as_timezone(date_time, time_zone):
tz = timezone(time_zone)
utc = timezone('UTC')
return date_time.replace(tzinfo=utc).astimezone(tz)
def datetime_to_str(date_time):
date_time_tzone = datetime_as_timezone(date_time, 'Asia/Shanghai')
return '{0:%Y-%m-%d %H:%M}'.format(date_time_tzone)