【问题标题】:Python 3 - Working with datetime.time objects - timedeltaPython 3 - 使用 datetime.time 对象 - timedelta
【发布时间】:2015-12-17 03:10:30
【问题描述】:

在我的 python 代码中遇到了一个我不理解的问题。

timestamps = list(map(lambda ts: ts.time, timestamps))
start_timestamps = timestamps
end_timestamps = timestamps[1:]
d = date(2000, 1, 1)
FMT = '%H:%M:%S'
for i, t1 in enumerate(start_timestamps):
    t1 = datetime.combine(d, start_timestamps[i])
    t2 = datetime.combine(d, end_timestamps[i])
    dt = t1 - t2
    #dt = datetime.strptime(t1,FMT) - datetime.strptime(t2,FMT)

通过在我的 django 项目中使用它,我收到以下错误:

t2 = datetime.combine(d, end_timestamps[i])

TypeError: combine() 参数 2 必须是 datetime.time,而不是字节

当取消注释最后一行并注释它上面的三行时,我得到以下信息:

dt = datetime.strptime(t1,FMT) - datetime.strptime(t2,FMT)

TypeError: 必须是 str,而不是 datetime.time

所以我真的不明白。是datetime.time,但同时又不是……谁能帮帮我?

谢谢!

【问题讨论】:

    标签: python django datetime python-3.x time


    【解决方案1】:

    某些对象是bytes 对象,而其他对象是datetime.time 对象。换句话说,您有多种对象。

    请注意,在您的第一个错误中失败的是 end_timestamps[i],而不是 start_timestamps[i]。因此,start_timestamps[i] 是一个 time 对象。如果 timestamps 中的所有对象,其中 bytes 对象,datetime.combine(d, start_timestamps[i]) 将失败。

    您需要弄清楚为什么您的ts.time() 调用在您的map() 调用中返回不一致的数据类型。

    【讨论】:

    • 谢谢,我只是没看到这个。我有另一行将时间附加到 end_timestamps 的列表中,它由返回时间对象的函数传递。但我没有将其转换为 datetime.time 对象。你能帮帮我吗?
    • 不,不是。如果您发布了一个带有minimal reproducible example 的新问题来说明这个问题,那么我可能会得到足够的信息来提供帮助。 :-)
    猜你喜欢
    • 2022-01-21
    • 1970-01-01
    • 2017-09-16
    • 2016-01-15
    • 1970-01-01
    • 2012-04-18
    • 2018-03-29
    • 1970-01-01
    相关资源
    最近更新 更多