Python: как получить время из datetime.timedelta объект?
таблица базы данных mysql имеет столбец, тип данных которого-time (http://dev.mysql.com/doc/refman/5.0/en/time.html). При доступе к данным таблицы Python возвращает значение этого столбца в виде datetime.timedelta объект. Как извлечь из этого время? (Я действительно не понимал, для чего timedelta из руководств python).
например. Столбец в таблице содержит значение " 18: 00:00" Python-MySQLdb возвращает это как datetime.timedelta(0, 64800)
Пожалуйста, игнорируйте то, что ниже (он возвращает другое значение) -
Added: независимо от значения времени в таблице, python-MySQLdb, кажется, только возвращает datetime.timedelta(0, 64800).
примечание: Я использую Python 2.4
2 ответов
странно, что Python возвращает значение datetime.timedelta
. Вероятно, он должен вернуть datetime.time
. Во всяком случае, похоже, что он возвращает прошедшее время с полуночи (при условии, что столбец в таблице равен 6:00 PM). Для преобразования в datetime.time
, вы можете сделать следующее:
value = datetime.timedelta(0, 64800)
(datetime.datetime.min + value).time()
datetime.datetime.min
и datetime.time()
, конечно, задокументированы как часть datetime модуль, если вам нужна дополнительная информация.
A datetime.timedelta
Это, кстати, представление разницы между двумя datetime.datetime
значения. Так что если вычесть один datetime.datetime
С другого, вы получите datetime.timedelta
. И если вы добавите datetime.datetime
С datetime.timedelta
, вы получите datetime.datetime
. Вот как работает приведенный выше код.
мне кажется, что тип времени в MySQL предназначен для представления временных интервалов как datetime.timedelta делает в Python. Из документов, на которые вы ссылались:
значения времени могут колебаться от '-838:59:59' до '838:59: 59'. Часть часов может быть настолько большой, потому что тип времени может использоваться не только для представления времени суток (которое должно быть менее 24 часов), но и истекшего времени или интервала времени между двумя событиями (который может быть намного больше 24 часов или даже негативный.)
альтернатива преобразованию из datetime.timedelta в datetime.время было бы изменить тип столбца на DATETIME и не использовать поля даты.
-вставить:
tIn = datetime.datetime(
year=datetime.MINYEAR,
month=1,
day=1,
hour=10,
minute=52,
second=10
)
cursor.execute('INSERT INTO TableName (TimeColumn) VALUES (%s)', [tIn])
-выберите:
cursor.execute('SELECT TimeColumn FROM TableName')
result = cursor.fetchone()
if result is not None:
tOut = result[0].time()
print 'Selected time: {0}:{1}:{2}'.format(tOut.hour, tOut.minute, tOut.second)
datetime.time () вызывается для объекта datetime для получения объекта time.