2017-06-28 28 views
0

我想在中央时区的特定日期指定12点,并调整夏令时(CDT)。然后,我想将其转换为POSIX时间戳。如何将知悉的日期时间转换为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日,定义一个划时代减去我知道时间,但不工作除非datetime获得UTC偏移量正确(参见上面的第二点)。

任何人都可以帮助我一个这种东西如何工作的心理模型,特别是对这个问题的解决方案?

+0

对不起。我用我的例子中的东部时间。 – Kenny

回答

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()