【问题标题】:How to know time difference even if you pass midnight ? python即使过了午夜,如何知道时差? Python
【发布时间】:2018-02-27 09:01:22
【问题描述】:

所以这背后的想法很简单(是的,这是一个练习而不是现实生活中的问题)

所以有一个女孩的时钟是假的,但她朋友的时钟总是正确的。所以当她离开家时,她记得她离开时钟的时间。在她的朋友那里,她看到了她到达和离开的时间,回到家后,她又看到了时间。这样,即使我们不知道她开了多长时间,我们也可以知道正确的时间。 例如,她在 6:32 离开她的地方,她在 14:14 和她的朋友一起到达,在 17:21 和她的朋友一起离开,并在 13:29 到家。

总时间是 6:57,其中她花了 3:07 和她的朋友在一起,其余时间除以 2,所以你知道 1 次汽车旅行的时间。

因此,如果您将此时间与您留在朋友家的时间相加,您会找到实际时间。

现在我之前已经解决了这个问题,但当时我不知道 datetime 函数,所以我想也许我可以这样解决它。我对日期时间的问题是,当午夜过去时,它被卡住了

例如,当她 9:04 离开家时,她在 6:15 到达朋友并在 14:54 离开并在 5:13 回家时,我知道正确的时间是 8:57,而应该是 20 :57。

也许它在我的 datetime.timedelta 中有些问题,但我不知道如何解决。

非常欢迎任何建议 非常感谢

我此刻的代码:

import datetime

# function nessesary to convert timedelta back into time 
def convert_timedelta(duration):
    days, seconds = duration.days, duration.seconds
    hours = days * 24 + seconds // 3600
    minutes = (seconds % 3600) // 60
    seconds = (seconds % 60)
    return hours, minutes, seconds

# input
hour_department_home = int(input("Hour of department at home: "))
minutes_department_home = int(input("Minutes of department at home: "))

hour_arrival_friend = int(input("Hour of arrivel friends house: "))
minutes_arrival_friend = int(input("Minutes of department friends house: "))

hour_department_friend = int(input("Hour of arrivel friends house: "))
minutes_department_friend = int(input("Minutes of arrivel friends house: "))

hour_arrival_home = int(input("Hour of arrivel home : "))
minutes_arrival_home = int(input("Minutes of arrivel home: "))

# putting into hours
department_home = datetime.time(hour_department_home,minutes_department_home,second=0)
arrival_friend = datetime.time(hour_arrival_friend,minutes_arrival_friend)
department_friend = datetime.time(hour_department_friend,minutes_department_friend)
arrival_home= datetime.time(hour_arrival_home,minutes_arrival_home)

# time at friends
uur_1,uur_2 = datetime.timedelta(hours=department_friend.hour),datetime.timedelta(hours = arrival_friend.hour)
hours_with_friend = uur_1-uur_2

min_1,min_2= datetime.timedelta(minutes=department_friend.minute),datetime.timedelta(minutes=arrival_friend.minute)
min_with_friend = min_1-min_2

total_time_with_friend = hours_with_friend + min_with_friend

# time away
uur_1h,uur_2h = datetime.timedelta(hours=arrival_home.hour),datetime.timedelta(hours = department_home.hour)
hours_away_from_home = uur_1h-uur_2h

min_1h,min_2h= datetime.timedelta(minutes=arrival_home.minute),datetime.timedelta(minutes=department_home.minute)
min_away_from_home = min_1h-min_2h

total_time_away = hours_away_from_home + min_away_from_home

duration_drive = (total_time_away-total_time_with_friend) /2

the_time = datetime.timedelta(hours=department_friend.hour,minutes=department_friend.minute) +duration_drive

hours, minutes, seconds = convert_timedelta(the_time)

print(hours)
print(minutes)

【问题讨论】:

  • 你总是用time提醒,你忘了date
  • @Baduker 的评论:如果我错了,请纠正我,但这可能会有所帮助(和/或重复):Python format timedelta greater than 24 hours
  • @Baduker 感谢我之前看到这个的评论,但它并没有真正帮助我进一步

标签: python datetime timedelta


【解决方案1】:

用datetime.datetime代替datetime.time,会考虑到日期的变化

date_1 = datetime.datetime(year1, month1, day1, hour1, minutes1, seconds1)
date_2 = datetime.datetime(year2, month2, day2, hour2, minutes2, seconds2)
timedelta = date_2 - date_1

然后你有timedelta.secondstimedelta.daystimedelta.microsecondstimedelta.total_seconds(),如果你需要一个浮点数

【讨论】:

  • 那么我使用 datetime.datetime 而不是 datetime.time 呢?
  • @LibertyVerleysen 是的,您应该使用 datetime.datetime 而不是 datetime.time。由于 datetime.time 不知道日期更改(通过您提到的午夜)。
  • 所以我尝试了这个,但我有点不知道该放弃什么,等等,这有关系吗?显然没有标准日期,从我的问题开始,我不知道它是什么日期看到她的时钟(错误的)仍然可以在前一天
  • 使用start_date = datetime.datetime(1, 1, 1, START_HOUR, START_MINUTE, START_SECOND) 与您的出发时间数据。对于到达时间,如果小时 datetime.datetime(1, 1, 2, END_HOUR, END_MINUTE, END_SECOND),否则使用 datetime.datetime(1, 1, 1, ....) 这很难看,但如果你唯一拥有的是 HH:MM:SS 你不能在 datetime 上做得更好,你会更幸运一些 @ 987654329@ 和 % 60 + 一点逻辑
  • @GabrielSamain 正如问题中提到的那样,我确实在没有日期时间的情况下解决了它,因为当时我不知道日期时间。只是认为这样更容易,但显然不是。非常感谢所有的帮助,我现在确实更好地理解了日期时间
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-13
  • 2013-07-18
相关资源
最近更新 更多