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.