【问题标题】:Error getting Time from datetime.timedelta object in python从 python 中的 datetime.timedelta 对象获取时间时出错
【发布时间】:2017-11-03 07:59:41
【问题描述】:

我想从 datetime.timedelta 对象中以“HH:MM”格式检索时间。我有一个存储在 MySQL 数据库中的表。它有时间列,以格式存储时间,

00:00:00

我已经使用 PyMySQL 模块连接到 MySQL 服务器,

conn = pymysql.connect("localhost", "root", "cloudera", "streaming")
cursor = conn.cursor()
sql = "select * from table1 limit 5;"
cursor.execute(sql)
row = cursor.fetchone()
row[1]

输出是,

datetime.timedelta(0)

我已经通过这个帖子Python: How do I get time from a datetime.timedelta object?。但是与那个问题和我的不同之处在于输出结果。对于那个帖子,输出是

datetime.timedelta(0, 64800)

对我来说只是,

datetime.timedelta(0)

我只是不明白为什么我的输出是这样的。谁能帮我找回时间。提前致谢。

【问题讨论】:

  • timedelta(0) 表示 0 天 0 秒,所以你想要 00:00
  • 哦!但在表格的后面有“23:00”之类的条目。那么,如何从 datetime 模块解决这个问题?
  • “23:00”这一列的数据类型是什么?
  • 粘贴以下mysql命令的输出:show columns from table1
  • date | time | id | name | count | +------------+----------+-----------+----------------------------+--------------+ | 2009-05-01 | 23:00:00 | 4 | Town Hall (West) | 1592 MySQL 中给定的时间数据类型是“时间”。对于这个输出,python 中的输出是datetime.timedelta(0, 82800)

标签: python mysql anaconda


【解决方案1】:

当您键入row[1] 时,python 会打印变量的 repr - 在这种情况下 timedelta 的 repr 是“datetime.timedetla(days, seconds)”。

您可以使用 str 对其进行字符串化,但这会给您 HH:MM:SS

str(row[1]) 
-> "23:00:00"

要获得 HH:MM,您可以执行以下操作:

(datetime.min + row[1]).strftime("%H:%M")
-> "23:00"

所以你的代码应该是这样的:

conn = pymysql.connect("localhost", "root", "cloudera", "streaming")
cursor = conn.cursor()
sql = "select * from table1 limit 5;"
cursor.execute(sql)
row = cursor.fetchone()

timestr = (datetime.min + row[1]).strftime("%H:%M")
print(timestr)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多