Python:如何从datetime.timedelta对象中获取时间?

时间:2009-04-18 20:55:49

标签: python mysql timedelta

mysql数据库表有一个数据类型为time(http://dev.mysql.com/doc/refman/5.0/en/time.html)的列。访问表数据时,Python将此列的值作为datetime.timedelta对象返回。如何从中抽出时间? (我真的不明白pydel手册中的timedelta是什么意思)。

E.g。表中的列包含值“18:00:00” Python-MySQLdb将其返回为datetime.timedelta(0,64800)


请忽略下面的内容(它会返回不同的值) -

已添加:无论表中的时间值如何,python-MySQLdb似乎只返回datetime.timedelta(0,64800)。

注意:我使用的是Python 2.4

2 个答案:

答案 0 :(得分:36)

奇怪的是,Python将值返回为datetime.timedelta。它可能应该返回datetime.time。无论如何,看起来它正在返回自午夜起经过的时间(假设表中的列是下午6:00)。要转换为datetime.time,您可以执行以下操作::

value = datetime.timedelta(0, 64800)
(datetime.datetime.min + value).time()
当然,如果您需要更多信息,

datetime.datetime.mindatetime.time()会被记录为datetime模块的一部分。

顺便说一句,datetime.timedelta表示两个datetime.datetime值之间的差异。因此,如果您从另一个中减去一个datetime.datetime,您将获得datetime.timedelta。如果您使用datetime.datetime添加datetime.timedelta,则会获得datetime.datetime。这就是上面代码的工作方式。

答案 1 :(得分:2)

在我看来,MySQL中的TIME类型旨在表示日期时间间隔。时间间隔在Python中表示。来自您引用的文档:

  

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()来获取时间对象。