2017-04-11 27 views
1

我對Python有點新,但最難處理時間戳,utc和unixtime。python3 TimeStamp關閉2小時

這個例子是關閉2小時:

sec_in_day=86400 
today = datetime.datetime.utcnow() 
print(today) 

two_days_ago=today.timestamp()-(sec_in_day*2); 
print("Two days ago (unix)",two_days_ago) 

# Convert timestamp via 3rd party 
tool:http://www.onlineconversion.com/unix_time.htm 

#generated unix-timestamp is 2 hours early according to 3rd party tool 

2017年4月11日06:36:49.414133

兩天前(UNIX)1491712609.414133

轉換1491712609.414133通過在線工具提供我

孫,2017年4月9日4時36分49秒GMT

期待太陽,2017年4月9日06:36:49 GMT

回答

1

我相信這一切都按設計工作。

首先,你做的事:

today = datetime.datetime.utcnow() 

這是UTC,沒有夏令調整,無需本地時區調整。

然後你做:

today.timestamp() 

其中,根據docs是本地時間,因此它包括日光節約,以及當地時區進行調整。

這解釋了2小時的差異。

什麼你可能想看看是today - datetime.timedelta(days=2)

+0

但是我有沒有把它轉換成UCT做 datetime.datetime.utcnow() – user914584

+0

如何從兩天前獲得UTC unixtimestamp? – user914584

+0

,UTC時間戳是那麼尚客\t newday =今天 - datetime.timedelta(天= 2) 打印( 「ND」,newday) 打印( 「ND」,newday.timestamp()) – user914584

1

這解決了我的問題

sec_in_day=86400 
today = datetime.datetime.utcnow() 

timestamp = today.replace(tzinfo=timezone.utc).timestamp() 
print("Today",today) 
print("Today-Re", today.replace(tzinfo=timezone.utc)) 
print("TS",timestamp) 
print("TS#2",(timestamp-(sec_in_day*2))) 
0

您也可以使用下面的代碼

sec_in_day=86400 
today = datetime.datetime.utcnow() 
print(today) 

two_days_ago=today.timestamp()-(sec_in_day*2); 

print("Two days ago (unix): ",datetime.datetime.fromtimestamp(two_days_ago).strftime('%Y-%m-%d %H:%M:%S.%f')) 

在此我用fromtimestamp( 2_days_ago).strftime('%Y-%m-%d%H:%M:%S.%f'))將紀元時間轉換爲可讀形式的函數。