두 날짜를 비교하는 방법?


379

파이썬을 사용하여 두 날짜를 비교하여 나중에 어떤 날짜를 확인합니까?

예를 들어, 현재 날짜가 휴일 목록에서 작성중인이 목록의 마지막 날짜를 지 났는지 확인하여 자동으로 이메일을 보내 관리자에게 holiday.txt 파일을 업데이트하도록 지시합니다.


20
어, 다른 비교와 마찬가지로 <and >연산자 를 사용합니다 .
Daniel Roseman

12
@JohnMachin : prototype으로 함수를 작성하고 int compare_dates(void const *, void const*)두 인수를 모두 캐스팅 struct Date *하여 비교 논리를 구현합니다. 파이썬 초보자에게는 분명하지 않을 수 있습니다.
Fred Foo

1
@larsmans : 죄송합니다 .... s / any_language / any_reasonable_language / 그리고 비합리적인 언어에 익숙한 사람은 문서를 꼼꼼히 살펴보고 date1 <date2
John Machin


1
@Galaxy-그는 비유를 사용하여 노련한 사람에게 단순해야 할 것이 전체 초보자에게는 간단하지 않을 수 있으며 C를 사용하여 이것을 설명합니다. 그는 그 질문이 C에 관한 것이라고 생각하지 않습니다. 그리고 그는 옳았습니다. 저는 거의 8 년 전에이 질문을했을 때 총 초보자였습니다.
Cecil Rodriguez

답변:


494

datetime방법과 연산자 <및 그 친족을 사용하십시오 .

>>> from datetime import datetime, timedelta
>>> past = datetime.now() - timedelta(days=1)
>>> present = datetime.now()
>>> past < present
True
>>> datetime(3000, 1, 1) < present
False
>>> present - datetime(2000, 4, 4)
datetime.timedelta(4242, 75703, 762105)

19
이것은 누군가가 궁금하다면 시간대 인식 값에도 적용됩니다.
Mat Gessel

2
사이 다른 무엇 pastpresent? 귀하의 예를 이해할 수 없으며 결과가 의미가 없습니다.
Emadpres

19
@Emadpres : 수동으로 입력했다고 상상해보십시오. 과거 줄이 먼저 입력되고 현재 줄이 두 번째로 입력되었습니다. 그래서 과거 줄이 먼저 입력되었으므로 과거 <현재는 True입니다.
ramcdougal

2
문서에서 인용 : "하나의 비교가 순진하고 다른 것이 알면 순서 비교를 시도하면 TypeError가 발생합니다. 평등 비교의 경우 순진 인스턴스는 인식하는 인스턴스와 절대 동일하지 않습니다. 두 비교가 모두 인식되고 동일한 경우 tzinfo 속성, 공통 tzinfo 속성은 무시되고 기본 날짜 시간이 비교됩니다. 두 비교자가 모두 인식하고 다른 tzinfo 속성을 갖는 경우 비교는 먼저 UTC 오프셋을 빼서 (self.utcoffset ()에서 획득) 조정됩니다. "
Vikas Prasad

2
변수 이름은 past및 이어야합니다 past_but_a_little_after. 기술적으로 present비교할 때도 과거 past < present입니다.
grisaitis

74

사용하다 time

초기 날짜가 다음과 같은 문자열이라고 가정 해 봅시다.
date1 = "31/12/2015"
date2 = "01/01/2016"

다음을 수행 할 수 있습니다
newdate1 = time.strptime(date1, "%d/%m/%Y")newdate2 = time.strptime(date2, "%d/%m/%Y")파이썬의 날짜 형식으로 변환 할 수 있습니다. 그런 비교는 분명하다 :

newdate1 > newdate2리턴 False
newdate1 < newdate2돌아갑니다True


39

datetime.date(2011, 1, 1) < datetime.date(2011, 1, 2)을 반환 True합니다.

datetime.date(2011, 1, 1) - datetime.date(2011, 1, 2)을 반환 datetime.timedelta(-1)합니다.

datetime.date(2011, 1, 1) + datetime.date(2011, 1, 2)을 반환 datetime.timedelta(1)합니다.

문서를 참조하십시오 .


3

다른 답변을 사용하여 datetime 하고 비교하는 것도 날짜없이 시간 동안 만 작동합니다.

예를 들어, 지금 오전 8시 이상인지 확인하려면 다음을 사용할 수 있습니다.

import datetime

eight_am = datetime.time( 8,0,0 ) # Time, without a date

그리고 나중에 다음과 비교하십시오.

datetime.datetime.now().time() > eight_am  

이것은 돌아올 것이다 True


-1

두 날짜 차이로 요일을 계산하려면 다음과 같이하십시오.

import datetime
import math

issuedate = datetime(2019,5,9)   #calculate the issue datetime
current_date = datetime.datetime.now() #calculate the current datetime
diff_date = current_date - issuedate #//calculate the date difference with time also
amount = fine  #you want change

if diff_date.total_seconds() > 0.0:   #its matching your condition
    days = math.ceil(diff_date.total_seconds()/86400)  #calculate days (in 
    one day 86400 seconds)
    deductable_amount = round(amount,2)*days #calclulated fine for all days

기한이 1 초 이상인 경우에는 청구해야합니다.


질문에 대답하지 않습니다.
Willwsharp
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.