关于datetime:在python中保存日期时间的时间戳转换

Daylight time saving aware conversion of timestamps in python

给定没有时区的时间戳(例如2018-03-12 09:30:00)和时区EST5EDT,目标是解析返回时区和日光节省的日期时间对象的数据。

1
2
3
4
5
6
7
8
9
10
11
12
from datetime import datetime
import pytz

datetime(2018, 3, 8, 9, 30, tzinfo=pytz.timezone('EST5EDT')).astimezone(pytz.utc)
# returns:
# datetime.datetime(2018, 3, 8, 14, 30, tzinfo=<UTC>)

datetime(2018, 3, 12, 9, 30, tzinfo=pytz.timezone('EST5EDT')).astimezone(pytz.utc)
# returns:
# datetime.datetime(2018, 3, 12, 14, 30, tzinfo=<UTC>)
# BUT should return (second Sunday of march the daylight saving changes by 1 hour):
# datetime.datetime(2018, 3, 12, 13, 30, tzinfo=<UTC>)

创建日期时,切勿直接设置tzinfo。 始终使用时区的localize()方法(请参阅http://pytz.sourceforge.net/顶部的注释):

1
2
3
pytz.timezone('EST5EDT').localize(
    datetime(2018, 3, 12, 9, 30)
).astimezone(pytz.utc)