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

2024-06-02 05:53:46 发布

您现在位置:Python中文网/ 问答频道 /正文

mysql数据库表有一个数据类型为time(http://dev.mysql.com/doc/refman/5.0/en/time.html)的列。访问表数据时,Python将此列的值作为datetime.timedelta对象返回。我如何从中抽出时间?(我并没有真正理解python手册中timedelta的用途)。

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


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

添加:不管表中的时间值是多少,python MySQLdb似乎只返回datetime.timedelta(064800)。

注意:我使用Python2.4


Tags: devcom数据库httpdatetimedoctimehtml
2条回答

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

value = datetime.timedelta(0, 64800)
(datetime.datetime.min + value).time()

如果您需要更多信息,那么datetime.datetime.mindatetime.time()当然是datetime模块的一部分。

顺便说一下,Adatetime.timedelta是两个datetime.datetime值之间差异的表示。所以如果你从另一个中减去一个datetime.datetime,你将得到一个datetime.timedelta。如果你用datetime.timedelta加上datetime.datetime,你会得到datetime.datetime。上面的代码就是这样工作的。

在我看来,MySQL中的TIME类型旨在表示时间间隔,就像Python中的datetime.timedelta那样。从您引用的文档中:

TIME values may range from '-838:59:59' to '838:59:59'. The hours part may be so large because the TIME type can be used not only to represent a time of day (which must be less than 24 hours), but also elapsed time or a time interval between two events (which may be much greater than 24 hours, or even negative).

从date time.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()以获取时间对象。

相关问题 更多 >