2017-07-31 56 views
0

我在查詢數據庫以獲取日期時間,然後嘗試將其轉換爲unix時間戳。下面是我的一些代碼:屬性錯誤,而試圖將日期時間轉換爲python中的unix時間戳2.7

#! /bin/python 
import time, pytz 
from datetime import datetime 

eastern = pytz.timezone("US/Eastern") 

def toUnix(dt): 
    #converts a datetime to a unix timestamp 
    return time.mktime(dt.timetuple()) 

def getFillStartTime(fillNo): 
    #returns the start time of a fill as a unix time stamp 
    dsacursor.execute('select startTime from fillInfo where fillNo = @fillNo',{'@fillNo':fillNo}) 
    sel = dsacursor.fetchall() 
    dt = sel[0][0] 
    dt = dt.replace(tzinfo = eastern) 
    return toUnix(dt) 

print getFillStartTime(20318) 

當我運行它,我得到AttributeError: replace這裏回溯:

Traceback (most recent call last): 
    File "test.py", line 27, in <module> 
    print getFillStartTime(20318) 
    File "importToLogView.py", line 25, in getFillStartTime 
    dt = dt.replace(tzinfo = eastern) 
AttributeError: replace 

當它傳遞給我測試了一些東西,DateTimeTypedttoUnix()函數。另外,當我用datetime.now().timetuple()替換dt.timetuple()時,它會打印預期結果。我也嘗試不更換tzinfo,而是給出AttributeError: timetuple。如果是日期時間,爲什麼會發生此錯誤?

+0

[轉換爲UNIX時間戳的Python(https://stackoverflow.com/questions/42491129/converting-to-unix-timestamp-python) –

+0

是什麼,如果你的輸出可能的複製在'dt = sel [0] [0]'之後放置'print type(dt)'? –

+0

'' –

回答

0

你假設sel將是一個日期時間對象,但它不是。無法從您發佈的代碼片段中派生出來,並且很可能會以字符串的形式返回(數據庫客戶端依賴)。這樣做的一般形式是

dt = datetime.strptime(sel[0][0], '%b %d %Y %I:%M%p')

其中%b %d %Y %I:%M%p是字符串的格式。

編輯:格式化

+0

如果我在'dt = sel [0] [0]之後打印類型(dt)',輸出是'' –

+0

是的,我會這樣認爲的,因爲你的數據庫客戶端最有可能會演員。 Python的日期時間(和pytz)不理解,所以你需要把它放到''type'datetime.datetime'>'或類似的東西里。另外,你使用的是哪個數據庫客戶端? –

+0

謝謝,修復它。我正在使用Sybase。 –

相關問題