mysql数据库表有一个列,其数据类型为time ( http://dev.mysql.com/doc/refman/5.0/en/time.html )。当访问表数据时,Python将该列的值作为datetime.timedelta对象返回。我怎样才能从中抽出时间?(我并不真正理解python手册中的timedelta是什么用的)。
例如,表中的列包含值"18:00:00“Python以datetime.timedelta(0,64800)的形式返回
请忽略下面的内容(它确实返回不同的值)-
添加:不管表中的时间值如何,python似乎只返回datetime.timedelta(0,64800)。
注意:我使用Python2.4
发布于 2009-04-18 21:04:40
奇怪的是,Python以datetime.timedelta的形式返回值。它可能应该返回一个datetime.time。无论如何,它似乎返回了自午夜以来的运行时间(假设表中的列是下午6:00 )。为了转换为datetime.time,可以执行以下操作:
value = datetime.timedelta(0, 64800)
(datetime.datetime.min + value).time()当然,如果您需要更多信息,datetime.datetime.min和datetime.time()是日期时间模块的一部分。
顺便说一句,datetime.timedelta是两个datetime.datetime值之间差异的表示。因此,如果从另一个datetime.datetime中减去一个datetime.timedelta,就会得到一个datetime.timedelta。如果添加一个带有datetime.datetime的datetime.timedelta,就会得到一个datetime.datetime。上面的代码就是这样工作的。
发布于 2014-10-31 09:57:54
在我看来,MySQL中的时间类型是为了表示时间间隔,就像datetime.timedelta在Python中所做的那样。从你引用的文档中:
时间值可以从'-838:59:59‘到'838:59:59’之间。时间部分可能很大,因为时间类型不仅可以用来表示一天中的时间(必须小于24小时),而且可以用来表示经过的时间或两个事件之间的时间间隔(可能远远大于24小时,甚至是负的)。
从datetime.timedelta转换到datetime.time的另一种方法是将列类型更改为DATETIME,而不是使用date字段。
-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])-Select:
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()来获取时间对象。
https://stackoverflow.com/questions/764184
复制相似问题