我想在中心时区的特定日期指定12 PM,并调整夏令时(CDT)。然后,我想将其转换为POSIX时间戳。
我找到的第一件事是:
d = datetime.datetime(2017, 6, 27, 12, tzinfo=???)
但我没有具体的CDT课程。但是pytz
会这样做:
z = pytz.timezone('EST5EDT')
d = datetime.datetime(2017, 6, 27, 12, tzinfo=z)
但是这不起作用(pytz文档说的很多,但我不明白为什么构造函数不能使用时区信息)。如果我使用11月(后退)或6月(前进),我仍会得到12:00:00-05:00
作为时间部分。
即使这确实有效,转换为POSIX时间戳的方法也会假定一个天真的日期时间:
posix = time.mktime(d.timetuple())
此时间戳代表我当地时区的12PM。
然后有normalize()
代码和示例,我觉得很难遵循:
au_dt = au_tz.normalize(utc_dt.astimezone(au_tz))
我还试图从1970年1月1日定义的时期中减去我的识别时间,但除非日期时间得到UTC偏移正确,否则这不起作用(参见上面的第二点)。
任何人都可以帮助我建立一个关于这些东西如何运作的心理模型,特别是这个问题的解决方案吗?
答案 0 :(得分:0)
此解决方案似乎有效:
import pytz
import datetime
# Naive datetime (no timezone).
d = datetime.datetime(2017, 11, 27, 12)
cdt = pytz.timezone('US/Central')
# Give it a central time zone context.
d = cdt.localize(d)
# Determine the time in UTC.
d = d.astimezone(pytz.utc)
# Create a naive POSIX epoch.
epoch = datetime.datetime(1970, 1, 1)
# Give it context in the UTC time zone.
epoch = pytz.utc.localize(epoch)
# Number of seconds have elapsed since the epoch.
print (d - epoch).total_seconds()