不同工作日的两个时间戳之间的区别?
Difference between two timestamps with different weekdays?
我有以下日期:
Tue 19:00-20:00
Wed 04:25-15:14
如何区分 Tue 20:00
和 Wed 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
datetime.strptime()
不能做任何其他事情,因为星期几 不足以 形成日期。您需要周数和年份才能使 week-day 有意义。如果您需要获得假设在同一周的两个日期之间的相对差异,则any 周数和年份即可,例如:
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)
我有以下日期:
Tue 19:00-20:00
Wed 04:25-15:14
如何区分 Tue 20:00
和 Wed 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
datetime.strptime()
不能做任何其他事情,因为星期几 不足以 形成日期。您需要周数和年份才能使 week-day 有意义。如果您需要获得假设在同一周的两个日期之间的相对差异,则any 周数和年份即可,例如:
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)