【问题标题】:is there a better way to retrieve datetime object from list?有没有更好的方法从列表中检索日期时间对象?
【发布时间】:2019-01-22 03:25:01
【问题描述】:

编辑:在此处更新代码示例,https://repl.it/@HexKiz/FussyQuietPetabyte

import datetime

从日期时间导入日期时间

emp_history = { 1: ['Vox', datetime.datetime(2001, 1, 2, 0, 1), datetime.datetime(2002, 1, 2, 0, 1), 1.0], 2: ['telly', datetime.datetime(2001, 1, 2, 0, 1), datetime.datetime(2002, 1, 2, 0, 1), 1.0] }

def print_all(dict_emp_history): # 从 1 -> last 对键进行排序并打印所有记录 for x in sorted(dict_emp_history.keys()):

    # Get Tuple Values
    name = ([x[0] for x in dict_emp_history.values()])
    start = ([x[1] for x in dict_emp_history.values()])
    start = datetime.datetime.strptime(str(start), '%Y%M%d')

    end = ([x[2] for x in dict_emp_history.values()])
    total = ([x[3] for x in dict_emp_history.values()])
    print('---------------')
    print('This is record: {}'.format(x))
    print(dict_emp_history[x])
    print('{}   -Start:   {}  -End:   {}  -Total:   {}'.format(name, start, end, total))
    print('---------------')

定义主(): print_all(emp_history)

main()


注意到从列表中检索值会将其作为列表项返回。 有问题的值是 datetime.datetime(2001, 1, 8, 0, 9) 一个日期时间对象。

我需要做的是,检索 datetime 对象并将其打印为字符串,使其看起来像这样 2018.01.20。我知道你可以使用 strftime,但我不断收到错误,提示该值不是日期时间对象。

这是否意味着我必须将列表转换为字符串,然后再转换回日期时间对象?

肯定有更好的方法来做到这一点。


import datetime


td = {
    1: ('hex', datetime.datetime(2001, 1, 8, 0, 9), datetime.datetime(2002, 1, 8, 0, 5), 0.9999923896499239),
    2: ('hex', datetime.datetime(2001, 1, 8, 0, 9), datetime.datetime(2002, 1, 8, 0, 5), 0.9999923896499239)
}

print(td)

value = ([x[2] for x in td.values()])



print(value)
print(type(value))

{1: ('hex', datetime.datetime(2001, 1, 8, 0, 9), datetime.datetime(2002, 1, 8, 0, 5), 0.9999923896499239), 2: ('hex', datetime.datetime(2001, 1, 8, 0, 9), datetime.datetime(2002, 1, 8, 0, 5), 0.9999923896499239)}
[datetime.datetime(2002, 1, 8, 0, 5), datetime.datetime(2002, 1, 8, 0, 5)]
<class 'list'>

我希望 var 命名值的类型是 datetime 对象类型。

【问题讨论】:

  • I expected the type for the var named value to be of type datetime object. 为什么?这是一个日期时间的列表。另外,你能用strftime展示你的尝试吗?
  • @Tomothy32 此处显示:repl.it/@HexKiz/FussyQuietPetabyte

标签: python datetime


【解决方案1】:

您正在将列表推导的结果分配给。正如 Tomthy32 在他的评论中指出的那样,value 是一个日期时间对象的列表。

至于从列表中检索日期时间对象并将其打印为字符串,以下代码应该符合您的预期:

value = ([str(x[2]) for x in td.values()])

上面的输出是:

['2002-01-08 00:05:00', '2002-01-08 00:05:00']

希望这会有所帮助。

【讨论】:

  • 我屏幕上的输出是:[datetime.datetime(2002, 1, 8, 0, 5), datetime.datetime(2002, 1, 8, 0, 5)] 类型列表。我可以使用 str() 将其强制为字符串,但字符串库无法将其转换为日期时间对象。我可以破解这个并将字符串分开,但这似乎不是一个理想的解决方案
猜你喜欢
  • 1970-01-01
  • 2019-10-29
  • 1970-01-01
  • 2021-04-22
  • 1970-01-01
  • 2011-07-30
  • 1970-01-01
  • 2021-01-07
  • 1970-01-01
相关资源
最近更新 更多