Programing

Python의 날짜 차이 (분)

lottogame 2021. 1. 5. 07:41
반응형

Python의 날짜 차이 (분)


Python에서 다음 타임 스탬프의 시간 차이를 분 단위로 계산하려면 어떻게해야합니까?

2010-01-01 17:31:22
2010-01-03 17:31:22

from datetime import datetime

fmt = '%Y-%m-%d %H:%M:%S'
d1 = datetime.strptime('2010-01-01 17:31:22', fmt)
d2 = datetime.strptime('2010-01-03 17:31:22', fmt)

print (d2-d1).days * 24 * 60

RSabet의 답변 은 날짜가 정확한 시간이 아닌 경우 작동하지 않습니다.

원래 문제 :

from datetime import datetime

fmt = '%Y-%m-%d %H:%M:%S'
d1 = datetime.strptime('2010-01-01 17:31:22', fmt)
d2 = datetime.strptime('2010-01-03 17:31:22', fmt)

daysDiff = (d2-d1).days
print daysDiff
> 2

# Convert days to minutes
minutesDiff = daysDiff * 24 * 60

print minutesDiff
> 2880

d2-d1은 datetime.timedelta를 제공하며 요일을 사용하면 timedelta의 요일 만 표시합니다. 이 경우 잘 작동하지만 다음과 같은 경우가 있습니다.

from datetime import datetime

fmt = '%Y-%m-%d %H:%M:%S'
d1 = datetime.strptime('2010-01-01 16:31:22', fmt)
d2 = datetime.strptime('2010-01-03 20:15:14', fmt)

daysDiff = (d2-d1).days
print daysDiff
> 2

# Convert days to minutes
minutesDiff = daysDiff * 24 * 60

print minutesDiff
> 2880  # that is wrong

며칠 동안 여전히 2를 반환하기 때문에 여전히 동일한 대답을 제공했을 것입니다. timedelta에서 시간, 분 및 초를 무시합니다.

더 나은 방법은 날짜를 공통 형식으로 변환 한 다음 계산을 수행하는 것입니다. 이를 수행하는 가장 쉬운 방법은 Unix 타임 스탬프로 변환하는 것입니다. 이를 수행하는 코드는 다음과 같습니다.

from datetime import datetime
import time

fmt = '%Y-%m-%d %H:%M:%S'
d1 = datetime.strptime('2010-01-01 17:31:22', fmt)
d2 = datetime.strptime('2010-01-03 20:15:14', fmt)

# Convert to Unix timestamp
d1_ts = time.mktime(d1.timetuple())
d2_ts = time.mktime(d2.timetuple())

# They are now in seconds, subtract and then divide by 60 to get minutes.
print int(d2_ts-d1_ts) / 60
> 3043  # Much better

minutes_diff = (datetime_end - datetime_start).total_seconds() / 60.0

누군가가 그것을 깨닫지 못하는 경우이를 수행하는 한 가지 방법은 Christophe와 RSabet의 답변을 결합하는 것입니다.

from datetime import datetime
import time

fmt = '%Y-%m-%d %H:%M:%S'
d1 = datetime.strptime('2010-01-01 17:31:22', fmt)
d2 = datetime.strptime('2010-01-03 20:15:14', fmt)

diff = d2 -d1
diff_minutes = (diff.days * 24 * 60) + (diff.seconds/60)

print(diff_minutes)
> 3043

사용 datetime.strptime()하여 datetime 인스턴스로 구문 분석 한 다음 차이를 계산하고 마지막으로 차이를 분으로 변환합니다.


결과는 입력 시간 문자열에 해당하는 시간대에 따라 다릅니다.

두 날짜가 동일한 utc 오프셋을 사용하는 가장 간단한 경우 :

#!/usr/bin/env python3
from datetime import datetime, timedelta

time_format = "%Y-%d-%m %H:%M:%S"
dt1 = datetime.strptime("2010-01-01 17:31:22", time_format)
dt2 = datetime.strptime("2010-01-03 17:31:22", time_format)
print((dt2 - dt1) // timedelta(minutes=1)) # minutes

Python 버전이 지원하지 않는 경우 td // timedelta; 로 대체합니다 int(td.total_seconds() // 60).

입력 시간이 서로 다른 시간에 예를 들어, 오프셋 다른 UTC가있을 수 있습니다 로컬 시간대에있는 경우, 그 다음 당신이해야 일광 절약 시간이 dt1, dt2고려하기 위해, 차이를 발견하기 전에 인식 날짜 객체로를 UTC의 가능한 변화 오프셋 .

The portable way to make an aware local datetime objects is to use pytz timezones:

#!/usr/bin/env python
from datetime import timedelta
import tzlocal # $ pip install tzlocal

local_tz = tzlocal.get_localzone() # get pytz timezone
aware_dt1, aware_dt2 = map(local_tz.localize, [dt1, dt2])
td  = aware_dt2 - aware_dt1 # elapsed time

If either dt1 or dt2 correspond to an ambiguous time then the default is_dst=False is used to disambiguate. You could set is_dst=None to raise an exception for ambiguous or non-existent local times instead.

If you can't install 3rd party modules then time.mktime() could be used from @Ken Cochrane's answer that can find the correct utc offset on some platforms for some dates in some timezones -- if you don't need a consistent (but perhaps wrong) result then it is much better than doing dt2 - dt1 with naive datetime objects that always fails if the corresponding utc offsets are different.


To calculate with a different time date:

from datetime import datetime

fmt = '%Y-%m-%d %H:%M:%S'
d1 = datetime.strptime('2010-01-01 16:31:22', fmt)
d2 = datetime.strptime('2010-01-03 20:15:14', fmt)

diff = d2-d1
diff_minutes = diff.seconds/60

As was kind of said already, you need to use datetime.datetime's strptime method:

from datetime import datetime

fmt = '%Y-%m-%d %H:%M:%S'
d1 = datetime.strptime('2010-01-01 17:31:22', fmt)
d2 = datetime.strptime('2010-01-03 17:31:22', fmt)

daysDiff = (d2-d1).days

# convert days to minutes
minutesDiff = daysDiff * 24 * 60

print minutesDiff

In Other ways to get difference between date;

import dateutil.parser
import datetime

timeDifference = current_date - dateutil.parser.parse(last_sent_date)
time_difference_in_minutes = (int(timeDifference.days) * 24 * 60) + int((timeDifference.seconds) / 60)

Thanks


there is also a sneak way with pandas:

pd.to_timedelta(x) - pd.to_timedelta(y)

ReferenceURL : https://stackoverflow.com/questions/2788871/date-difference-in-minutes-in-python

반응형