2011-03-04 23 views
0

當前,我擁有以秒爲單位的以下當前時間戳值示例。生成以下僞時間戳,作爲解決浮點圖形庫限制的解決方法

1299196800。這意味着

2011年3月4 0:0:格林威治(GMT)

2011年3月4 0 8:0:0馬來西亞(GMT +8)

當前,如果我的Python腳本將1299196800傳遞給了JavaScript庫的flot圖表,但它將始終顯示格林威治時間4 March 2011 0:0:0而不是馬來西亞時間4 March 2011 8:0:0,儘管客戶機正在使用馬來西亞時區。

我的python服務器將始終與客戶端機器具有相同的時區。我們希望4 March 2011 8:0:0在客戶端顯示。

因此,對海軍報圖形庫的限制,而不是傳遞1299196800,解決方法的目的,我想通過在

# 8 is timezone offset. 
# 1299196800 is current timestamp. 
pseudo_timestamp = 1299196800 + 8 * 60 * 60 

我想知道怎樣才能在Python上面的「僞時間戳」 ?用恆定的時區操縱一個好主意?它會在日光節約時遇到任何問題嗎?

回答

3

在設計中的UTC時間是由設計:尋找時間戳here,並且修復時間偏移是推薦的解決方案。

認爲海軍報的時間戳以毫秒爲單位,所以你必須要乘以你的例如通過1000

偏移量,它是不是一個好主意,不過,使用恆定時間戳記:一般你」 d嘗試發現客戶端偏移量,但由於您確定它與服務器相同,因此可以使用服務器數據來完成此操作。

使用time.daytime可以發現夏令時是否處於活動狀態,然後相應地使用time.timezometime.altzone來獲得以小時爲單位的偏移量。

時間

Python的文檔是here

鑑於這種情況,您可以調整時間戳轉換偏移以毫秒爲單位並將其添加到您的時間戳(你已經做了:))

1

您使用DATATIME物體tzinfo是時區感知。 以下是你如何真正做到這一點的簡短摘錄。

import datetime 
from datetime import tzinfo, timedelta 

class GMT8(tzinfo): 
    def utcoffset(self, dt): 
     return timedelta(hours=8) 
    def tzname(self, dt): 
     return "GMT +8" 
    def dst(self,dt): 
     return timedelta(0) 

malaysiatime = GMT8() 

o = datetime.datetime.fromtimestamp(1299196800,malaysiatime) 
print o 
# prints 2011-03-04 08:00:00+08:00