2015-02-12 52 views
0

我在轉換python驅動返回時間戳的event_time時遇到了一些麻煩。Cassandra python driver event_time

基本上,我需要存儲時間戳與一些關聯的數據,然後按時間範圍查詢。在開始的時候,我不知道,你可以把時間戳查詢,所以我想他們這樣轉換爲字符串:

datetime.utcfromtimestamp(timestamp).strftime('%Y-%m-%d %H:%M:%S')

現在,當我查詢從蟒蛇的數據(I轉換時間戳與上述相同,並將它們放入查詢中)我得到我想要轉換回時間戳的日期時間對象。我試圖

(row.event_time - datetime.utcfromtimestamp(0)).total_seconds()

但這似乎亂用的時區。這是否意味着返回的日期時間不是UTC?我嘗試了一些我在網上找到的其他轉換,但沒有任何效果。一旦它幾乎奏效,但當它到達夏令時開關的時候,我會得到新的一小時補償。

所以,我的問題是:在Python和Cassandra之間使用時間戳的正確方法是什麼?難道它不能像unix時間戳一樣簡單嗎?

+0

UTC時區沒有夏令時 - utc偏移量總是*爲零。如果Cassandra返回代表utc時間的相同日期時間對象,那麼'(dt-epoch).total_seconds()'應該返回原始的'timestamp'(不分數)。但它可能將天真的日期時間對象解釋爲偏離結果的本地時間。如果您無法在任何地方強制使用UTC時區,應該有一種方法可以直接傳遞時間戳。 – jfs 2015-02-12 16:15:41

回答

1

沒有看到你的代碼和預期的結果我會提供以下內容:

如果您在查詢時,以字符串插入,數據庫會認爲這是一個本地的時間和轉向UTC。如果您的字符串包含UTC偏移量(+0000),則不會發生這種情況(請注意,因爲您格式化的日期時間對象是時區初始的,所以'%z'將不起作用)。

如果你願意,你可以使用參數化的形式讓駕駛員把手編碼:

session.execute("INSERT INTO <table> (key, time) VALUES (%s, %s)", (key, datetime.utcfromtimestamp(timestamp)) 

session.execute("INSERT INTO <table> (key, time) VALUES (%s, %s)", (key, long(timestamp * 1000))) # scale to milliseconds 

從查詢回來的值將是UTC,時區,天真日期時間對象。