python datetimeタイムゾーン変換

5093 ワード

From:http://www.dannysite.com/blog/122/
Python標準ライブラリにおけるdatetimeモジュールは、日付と時間に関する様々な処理方法を提供している。本論文の主題から、まずdatetimeで提供されたutcnow()方法を利用して、現在のUTC時間まで取得する。
1
2
3
4>>> import  datetime>>> utc_now =  datetime.datetime.utcnow()>>> utc_nowdatetime.datetime(2013124154321872000)その時の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(2013124234321872000, tzinfo=datetime.timezone(datetime.timedelta(028800), ' '))しかし、この方法は不便そうです。特に他のタイムゾーンを変える時に。もっと低いバージョンの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(2013124234321872000, 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(20131250313122000, 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)