具有不同工作日的两个时间戳之间的区别?

Raf*_*oly 1 python datetime weekday python-3.x python-datetime

我有以下日期:

Tue 19:00-20:00
Wed 04:25-15:14
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到之间的区别Tue 20:00Wed 04:25

我试图在datetime对象中转换它,但由于我没有月份或年份的日期,两个对象将获得相同的日期:

d1 = datetime.strptime("Tue 20:00", "%a %H:%M")
d2 = datetime.strptime("Wed 04:25", "%a %H:%M")
Run Code Online (Sandbox Code Playgroud)
  • d1 是: datetime.datetime(1900, 1, 1, 20, 0)
  • d2 是: datetime.datetime(1900, 1, 1, 4, 25)

分钟的差异应该是505但在这种情况下是-935.0因为它们具有相同的日期,因此它们相差近 16 小时而不是大约 8 个半小时:

diff = (d2 - d1).total_seconds() / 60  # -935.0
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 5

datetime.strptime()不能做任何其他事情,因为星期几不足以形成日期。你需要一个星期数和一个星期的年份才能有意义。如果您需要获得假定在同一周的两个日期之间的相对差异,那么任何周数和年份都可以,例如:

arbitrary_iso_week = "2020-25 "

d1 = datetime.strptime(arbitrary_iso_week + "Tue 20:00", "%G-%V %a %H:%M")
d2 = datetime.strptime(arbitrary_iso_week + "Wed 04:25", "%G-%V %a %H:%M")
Run Code Online (Sandbox Code Playgroud)

这使用ISO 8601 周数%G%V格式化程序

这将生成具有更有意义的日期关系的日期时间对象:

>>> arbitrary_iso_week = "2020-25 "
>>> d1 = datetime.strptime(arbitrary_iso_week + "Tue 20:00", "%G-%V %a %H:%M")
>>> d2 = datetime.strptime(arbitrary_iso_week + "Wed 04:25", "%G-%V %a %H:%M")
>>> d1
datetime.datetime(2020, 6, 16, 20, 0)
>>> d2
datetime.datetime(2020, 6, 17, 4, 25)
>>> (d2 - d1).total_seconds() / 60
505.0
Run Code Online (Sandbox Code Playgroud)

实际日期在这里无关紧要,只是它们的天数差异。d1现在早于,不晚于d2

您可能必须考虑到工作日是循环的,因为您可以在较早的日期(例如星期五)和在星期一的较晚日期。如果您可以假设第一个值必须早于第二个值,那么解决方案很简单。d1如果晚于 ,只需减去 7 天d2

# if the first date must come before the second, then it must be one week earlier.
if d1 > d2:
    d1 -= timedelta(days=7)
Run Code Online (Sandbox Code Playgroud)