【问题标题】:Difference between two timestamps with different weekdays?不同工作日的两个时间戳之间的区别?
【发布时间】:2020-12-10 07:12:19
【问题描述】:

我有以下日期:

Tue 19:00-20:00
Wed 04:25-15:14

如何区分Tue 20:00Wed 04:25

我尝试将其转换为 datetime 对象,但由于我没有月份或年份的日期,因此两个对象将获得相同的日期:

d1 = datetime.strptime("Tue 20:00", "%a %H:%M")
d2 = datetime.strptime("Wed 04:25", "%a %H:%M")
  • 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

【问题讨论】:

  • 他们是否总是较早和较晚但最多相隔 6 天?

标签: python python-3.x datetime python-datetime weekday


【解决方案1】:

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")

这利用了%G and %V formatters for ISO 8601 week numbers

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

>>> 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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-18
    • 1970-01-01
    • 2010-10-25
    • 2018-12-28
    • 2021-05-08
    • 2014-04-14
    • 2012-02-29
    相关资源
    最近更新 更多