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
'Programing' 카테고리의 다른 글
열기 실패 : EACCES (권한 거부 됨) (0) | 2021.01.05 |
---|---|
매니페스트 병합 실패 오류 (0) | 2021.01.05 |
기본 및 필드 생성자를 자동 생성하는 이클립스 바로 가기는 무엇입니까? (0) | 2021.01.05 |
두 줄 이상의 JSON이 포함 된 파일을 Pandas에로드 (0) | 2021.01.05 |
Cache.properties (시스템이 지정된 파일을 찾을 수 없음) (0) | 2021.01.05 |