【问题标题】:How do i convert List into datetime.date object?如何将 List 转换为 datetime.date 对象?
【发布时间】:2019-07-19 20:39:24
【问题描述】:

我正在尝试从我的数据库中提取数据并以格式正确的形式显示。

当 db 给我日期时,我试图以字符串“日/月/年”的形式显示它。我已经使用以下代码来执行此操作,但它给我带来了错误。

如何将列表转换为 date.time 对象?

import psycopg2
from datetime import datetime
db = psycopg2.connect("dbname=news")
if db:
  print("DB CONNECTED")
c = db.cursor()
c.execute("select day from (select date(time) as day, count(id) as errors from log where status != '200 OK' group by day order by errors desc limit 1) as seq")
t = c.fetchall()
res = datetime.strftime(t,'%b %d, %Y')
print(res)
db.close()


TypeError: descriptor 'strftime' requires a 'datetime.date' object but received a 'list'

【问题讨论】:

  • 问题似乎是 t 不是您期望的那样。它可能是行结果列表。这意味着如果您将res = datetime.strftime(t,'%b %d, %Y') 更改为res = datetime.strftime(t[0],'%b %d, %Y'),此代码可能会起作用。尝试打印 t 并查看它是什么,如果您在问题中提供它会更容易提供帮助。
  • 是的,我也试过了。它显示相同的 Typeerror 描述符“strftime”需要一个“datetime.date”对象但收到一个“元组”
  • 好的,所以你从查询中得到了一个元组列表,很可能它是一个结合了行结果的行列表。如果您不打印变量 t 并向我们展示结果,这将是一个废话,您应该使用print(t) 的输出来编辑您的任务。话虽这么说,datetime.strftime(t[0][0],'%b %d, %Y') 可能会起作用,但如果你不分享 print(t) 的输出,那么这里很难为你提供帮助!
  • 但通常你不会像这样使用strftime;这是您在类实例上调用的方法,因此(一旦您为t 获得正确的对象)您将执行t.strftime('%b %d, %Y")
  • 是的,它成功了,非常感谢!

标签: python database postgresql datetime


【解决方案1】:

根据我的经验,您需要遍历列表。也许这会起作用,还没有测试过,但我就是这样做的。

import psycopg2
from datetime import datetime
db = psycopg2.connect("dbname=news")
if db:
  print("DB CONNECTED")
c = db.cursor()
c.execute("select day from (select date(time) as day, count(id) as errors from log where status != '200 OK' group by day order by errors desc limit 1) as seq")
t = c.fetchall()
c.close()
db.close()
for dates in t:
    print(datetime.strftime(dates, '%b %d, %Y'))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-26
    • 2012-07-22
    • 1970-01-01
    • 2022-06-15
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多