2017-06-28 29 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()