12 ответов:
>>> import datetime >>> a = datetime.datetime.now() >>> b = datetime.datetime.now() >>> c = b - a datetime.timedelta(0, 8, 562000) >>> divmod(c.days * 86400 + c.seconds, 60) (0, 8) # 0 minutes, 8 seconds
новое в Python 2.7-это
timedeltaметод.total_seconds(). Из документов Python это эквивалентно(td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6.Ссылка: http://docs.python.org/2/library/datetime.html#datetime.timedelta.total_seconds
>>> import datetime >>> time1 = datetime.datetime.now() >>> time2 = datetime.datetime.now() # waited a few minutes before pressing enter >>> elapsedTime = time2 - time1 >>> elapsedTime datetime.timedelta(0, 125, 749430) >>> divmod(elapsedTime.total_seconds(), 60) (2.0, 5.749430000000004) # divmod returns quotient and remainder # 2 minutes, 5.74943 seconds
просто вычесть один из другого. Вы получаете
timedeltaобъект, с той разницей.>>> import datetime >>> d1 = datetime.datetime.now() >>> d2 = datetime.datetime.now() # after a 5-second or so pause >>> d2 - d1 datetime.timedelta(0, 5, 203000)вы можете конвертировать
dd.days,dd.secondsиdd.microsecondsВ минут.
если
a,bявляются ли объекты datetime, чтобы найти разницу во времени между ними в Python 3:from datetime import timedelta time_difference = a - b time_difference_in_minutes = time_difference / timedelta(minutes=1)на более ранних версиях Python:
time_difference_in_minutes = time_difference.total_seconds() / 60если
a,bнаивный объекты datetime, например, возвращенныеdatetime.now()тогда результат может быть неправильным, если объекты представляют местное время с различными смещениями UTC, например, вокруг переходов DST или для прошлых/будущих дат. Более детально: найти, если 24 часа прошли между датами - Питон.чтобы получить надежные результаты, используйте время UTC или объекты datetime с учетом часового пояса.
использовать divmod:
now = int(time.time()) # epoch seconds then = now - 90000 # some time in the past d = divmod(now-then,86400) # days h = divmod(d[1],3600) # hours m = divmod(h[1],60) # minutes s = m[1] # seconds print '%d days, %d hours, %d minutes, %d seconds' % (d[0],h[0],m[0],s)
используя пример datetime
>>> from datetime import datetime >>> then = datetime(2012, 3, 5, 23, 8, 15) # Random date in the past >>> now = datetime.now() # Now >>> duration = now - then # For build-in functions >>> duration_in_s = duration.total_seconds() # Total number of seconds between datesпродолжительность в годы
>>> years = divmod(duration_in_s, 31556926)[0] # Seconds in a year=31556926.продолжительность в днях
>>> days = duration.days # Build-in datetime function >>> days = divmod(duration_in_s, 86400)[0] # Seconds in a day = 86400продолжительность в часах
>>> hours = divmod(duration_in_s, 3600)[0] # Seconds in an hour = 3600время в минутах
>>> minutes = divmod(duration_in_s, 60)[0] # Seconds in a minute = 60время в секундах
>>> seconds = duration.seconds # Build-in datetime function >>> seconds = duration_in_sдлительность в микросекундах
>>> microseconds = duration.microseconds # Build-in datetime functionобщая продолжительность между двумя датами
>>> days = divmod(duration_in_s, 86400) # Get days (without [0]!) >>> hours = divmod(days[1], 3600) # Use remainder of days to calc hours >>> minutes = divmod(hours[1], 60) # Use remainder of hours to calc minutes >>> seconds = divmod(minutes[1], 1) # Use remainder of minutes to calc seconds >>> print("Time between dates: %d days, %d hours, %d minutes and %d seconds" % (days[0], hours[0], minutes[0], seconds[0]))или просто:
>>> print(now - then)
вот как я получаю количество часов, прошедших между двумя датами времени.объекты datetime:
before = datetime.datetime.now() after = datetime.datetime.now() hours = math.floor(((after - before).seconds) / 3600)
чтобы просто найти количество дней: timedelta имеет атрибут "дней". Вы можете просто запросить это.
>>>from datetime import datetime, timedelta >>>d1 = datetime(2015, 9, 12, 13, 9, 45) >>>d2 = datetime(2015, 8, 29, 21, 10, 12) >>>d3 = d1- d2 >>>print d3 13 days, 15:59:33 >>>print d3.days 13
просто подумал, что было бы полезно упомянуть форматирования, а также в отношении timedelta. strptime() разбирает строку, представляющую время в соответствии с форматом.
import datetime from datetime import timedelta datetimeFormat = '%Y/%m/%d %H:%M:%S.%f' time1 = '2016/03/16 10:01:28.585' time2 = '2016/03/16 09:56:28.067' timedelta = datetime.datetime.strptime(time1, datetimeFormat) - datetime.datetime.strptime(time2,datetimeFormat)это выход: 0:05:00.518000
Я использую что-то вроде этого :
from datetime import datetime def check_time_difference(t1: datetime, t2: datetime): t1_date = datetime( t1.year, t1.month, t1.day, t1.hour, t1.minute, t1.second) t2_date = datetime( t2.year, t2.month, t2.day, t2.hour, t2.minute, t2.second) t_elapsed = t1_date - t2_date return t_elapsed # usage f = "%Y-%m-%d %H:%M:%S+01:00" t1 = datetime.strptime("2018-03-07 22:56:57+01:00", f) t2 = datetime.strptime("2018-03-07 22:48:05+01:00", f) elapsed_time = check_time_difference(t1, t2) print(elapsed_time) #return : 0:08:52
другими способами получить разницу между датой;
import dateutil.parser import datetime last_sent_date = "" # date string timeDifference = current_date - dateutil.parser.parse(last_sent_date) time_difference_in_minutes = (int(timeDifference.days) * 24 * 60) + int((timeDifference.seconds) / 60)Так что получить выход в мин.
спасибо
Это мой подход, используя mktime.
from datetime import datetime, timedelta from time import mktime yesterday = datetime.now() - timedelta(days=1) today = datetime.now() difference_in_seconds = abs(mktime(yesterday.timetuple()) - mktime(today.timetuple())) difference_in_minutes = difference_in_seconds / 60
Comments