【问题标题】:Convert datetime.time in datetime.datetime在 datetime.datetime 中转换 datetime.time
【发布时间】:2021-05-03 09:42:23
【问题描述】:

我想计算两个日期之间的秒差。

def delta_seconds(datetime, origin):
   td = datetime - origin  # datetime - date
   return float((td.microseconds + (td.seconds + td.days * 24 * 3600) * 10 ** 6)) / 10 ** 6

我无法计算差异,它向我显示了这个错误:

TypeError: unsupported operand type(s) for -: 'datetime.time' and 'datetime.datetime

所以,我想将 datetime.time 转换为 datetime.datetime。

(datetime 是 datetime.time obj,origin 是 datetime.datetime obj)

有什么建议吗?

【问题讨论】:

  • 您的问题是“日期之间的差异”,但您使用 datetime.time?能举个具体的例子吗?
  • 我从 nmea 句子 (object_nmea.timestamp) 中检索时间戳。这个时间戳是 datetime.time obj。然后我从一个 nmea 语句(object_nmea.date)中检索日期,它是一个 datetime.date obj。我将其转换为 datetime.datetime。现在,有了这些,我想以秒为单位计算差异
  • 好吧,你有一个日期和时间,你结合到一个日期时间对象?并且您想知道该日期过去了多少秒(给定时间)?
  • 是的,我有两个日期,我想知道从 datetime (datetime.time) 和 origin (datetime.datetime) 过去了多少秒。但我不能这样做,因为它们的类型不同
  • 您可以通过将日期对象与时间零相结合,轻松地从日期对象中获取日期时间对象;喜欢datetime_obj = datetime.datetime.combine(date_obj, datetime.time(0))

标签: python datetime time


【解决方案1】:
  1. 当您可以从标准库中获得所需的东西时,切勿自己执行计算。两个 datetime.datetime 对象之间的差异为您提供了 datetime.timedelta,它已经具有一个类属性 seconds,您可以从您的函数中返回它。
  2. 您可以使用datetime.combine 组合datetime.datedatetime.time

演示:

from datetime import datetime, date, time


def delta_seconds(end, origin):
    return (end - origin).seconds


# Test
date = date(2021, 5, 3)
time = time(10, 20, 30)
origin = datetime.combine(date, time)
end = datetime.now()
print(delta_seconds(end, origin))

输出:

33213

【讨论】:

  • 嗯,好的,所以我可以用“result.seconds”替换几秒钟内的转换(返回浮点((...))。明天我会修复它。谢谢!
【解决方案2】:

两个不同的datetime 的减法已经返回一个增量。 timedelta

参数origindatetime 必须是datetime 对象。要么将这两个参数设为 datetime 对象,要么将 datetime.time 的对象设为当前 datetime` 对象。

要将您的 time 转换为 datetimethis 可能会有所帮助,或者您手动调整字段。

import datetime

t = datetime.time(1, 2, 3)
print('t :', t)

d = datetime.date.today()
print('d :', d)

dt = datetime.datetime.combine(d, t)
print('dt:', dt)

输出

t : 01:02:03
d : 2013-02-21
dt: 2013-02-21 01:02:03

【讨论】:

    猜你喜欢
    • 2020-09-05
    • 2019-03-28
    • 1970-01-01
    • 2021-10-16
    • 2019-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多