Подтвердить что ты не робот

Python: Как мне получить время от объекта datetime.timedelta?

Таблица базы данных mysql имеет столбец, тип данных которого является временем (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)


Пожалуйста, проигнорируйте то, что ниже (оно возвращает другое значение) -

Добавлено: Независимо от значения времени в таблице, python-MySQLdb, похоже, возвращает datetime.timedelta(0, 64800).

Примечание. Я использую Python 2.4

4b9b3361

Ответ 1

Странно, что Python возвращает значение как datetime.timedelta. Вероятно, он должен вернуть a datetime.time. Во всяком случае, похоже, что он возвращает прошедшее время с полуночи (при условии, что столбец в таблице - 18:00). Чтобы преобразовать в 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. Это как работает код выше.

Ответ 2

Мне кажется, что тип TIME в MySQL предназначен для представления временных интервалов как datetime.timedelta в Python. Из документов, на которые вы ссылались:

Значения TIME могут варьироваться от '-838: 59: 59' до '838: 59: 59'. Часовая часть может быть настолько большой, потому что тип TIME может использоваться не только для представления времени суток (которое должно быть менее 24 часов), но также истекшего времени или временного интервала между двумя событиями (которые могут быть намного больше 24 часа или даже отрицательный).

Альтернативой преобразованию из datetime.timedelta в datetime.time должно быть изменение типа столбца в DATETIME, а не использование полей даты.

-Insert:

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 для получения объекта времени.