如何从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
2 个回答
我觉得MySQL中的TIME类型是用来表示时间间隔的,类似于Python中的datetime.timedelta。从你提到的文档来看:
TIME的值范围可以从'-838:59:59'到'838:59:59'。小时部分可以这么大,是因为TIME类型不仅可以表示一天中的某个时间(这个必须小于24小时),还可以表示经过的时间或者两个事件之间的时间间隔(这个可能大于24小时,甚至是负值)。
如果不想把datetime.timedelta转换成datetime.time,另一种选择是把列的类型改成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对象上调用datetime.time()可以得到一个时间对象。
奇怪的是,Python 返回的值是 datetime.timedelta
类型。其实它应该返回 datetime.time
类型。无论如何,看起来它返回的是从午夜到现在的时间(假设表格中的时间是下午6点)。要把它转换成 datetime.time
,你可以这样做:
value = datetime.timedelta(0, 64800)
(datetime.datetime.min + value).time()
datetime.datetime.min
和 datetime.time()
当然在 datetime 模块中有详细的说明,如果你想了解更多信息。
顺便说一下,datetime.timedelta
是用来表示两个 datetime.datetime
值之间的时间差。所以如果你用一个 datetime.datetime
减去另一个,你会得到一个 datetime.timedelta
。而如果你把一个 datetime.datetime
和一个 datetime.timedelta
相加,你会得到一个新的 datetime.datetime
。这就是上面代码的工作原理。