ошибка атрибута при попытке преобразовать дату и время в метку времени unix в python 2.7

Я запрашиваю базу данных, чтобы получить дату и время, а затем пытаюсь преобразовать ее в временную метку unix. Вот часть моего кода:

#! /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

Я протестировал некоторые вещи и dt типа DateTimeType, когда он передается функции toUnix(). Кроме того, когда я заменяю dt.timetuple() на datetime.now().timetuple(), он печатает ожидаемый результат. Я также пытался не заменять tzinfo, и вместо этого он дает AttributeError: timetuple. Если это дата и время, почему возникает эта ошибка?


person Mike Delmonaco    schedule 31.07.2017    source источник
comment
Возможный дубликат преобразования в unix timestamp Python   -  person Anthony Collins    schedule 31.07.2017
comment
Что получится, если поставить print type(dt) после dt = sel[0][0]?   -  person David Cullen    schedule 31.07.2017


Ответы (1)


Вы предполагаете, что sel будет объектом даты и времени, но это не так. Невозможно получить это из фрагмента кода, который вы опубликовали, и, скорее всего, он возвращается в виде строки (в зависимости от клиента базы данных). Общая форма для этого такова

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

где %b %d %Y %I:%M%p — формат строки.

РЕДАКТИРОВАТЬ: форматирование

person Andrew Sledge    schedule 31.07.2017
comment
если я print type(dt) после dt = sel[0][0] вывод будет <type 'DateTimeType'> - person Mike Delmonaco; 31.07.2017
comment
Да, я бы так предположил, потому что ваш клиент базы данных, скорее всего, использует это. Python datetime (и pytz) этого не понимает, поэтому вам нужно поместить его в <type 'datetime.datetime'> или что-то подобное. Кроме того, какой клиент базы данных вы используете? - person Andrew Sledge; 31.07.2017
comment
Спасибо, это исправлено. Я использую Sybase. - person Mike Delmonaco; 31.07.2017