날짜가 datetime.today ()와 같은 날인지 어떻게 확인할 수 있습니까?


88

이 조건 True은 시간을 비교하기 때문에 같은 날이더라도 항상 평가됩니다 .

from datetime import datetime

# ...

if date_num_posts < datetime.today(): 

날짜가 같은 날인지 어떻게 확인할 수 datetime.today()있습니까?

답변:


170

날짜 만 비교하고 싶다면

yourdatetime.date() < datetime.today().date()

또는 당연히

yourdatetime.date() == datetime.today().date()

같은 날짜 인지 확인하려면 .

문서 는 일반적으로 도움이됩니다. 또한 일반적으로에 대한 첫 번째 Google 결과입니다 python thing_i_have_a_question_about. 귀하의 질문이 "snake"라는 함수 / 모듈에 관한 것이 아니라면.

기본적으로 datetime모듈에는 특정 시점을 저장하는 세 가지 유형이 있습니다.

  • date 년, 월, 일
  • time 시, 분, 초, 마이크로 초, 시간대 정보
  • datetime날짜와 시간을 결합합니다. 이 방법을 가지고 date()time()해당 얻을 수 datetime개체를하고 편리한 거기에 combine결합하는 기능 datetime으로는 datetime.

3
"그것은 또한 일반적으로 python thing_i_have_a_question_about에 대한 첫 번째 Google 결과입니다."그리고 누군가가이 주제에 대해 SO 항목을 만들지 않는 한 여기에서 일어난 것처럼 :)
활동 줄이기

37
  • 날짜 값만 비교해야하는 경우 다음 코드를 사용할 수 있습니다.

    if yourdate.day == datetime.today().day:
        # do something
    
  • 두 날짜의 차이가 허용 되는지 확인해야하는 경우 timedelta 를 사용할 수 있습니다 .

    if (datetime.today() - yourdate).days == 0:
        #do something
    
  • 날짜 부분 만 비교하려면 다음을 사용하면됩니다.

    from datetime import datetime, date
    if yourdatetime.date() < datetime.today().date()
        # do something
    

timedelta의 형식은 다음과 같습니다.

datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])

따라서 실제로 필요한 것에 따라 일, 초, msec, 분 등으로 diff를 확인할 수 있습니다.

from datetime import datetime
if (datetime.today() - yourdate).days == 0:
    #do something

두 날짜가 정확히 동일한 지 확인해야하는 경우 timedelta (0)를 사용할 수 있습니다.

from datetime import datetime, timedelta
if (datetime.today() - yourdate) == timedelta(0):
    #do something

1
.day일입니다. 따라서 8 월 12 일은 첫 번째 코드 스 니펫을 사용하여 12 월 12 일과 "동일"합니다. 그것은 아마도 OP가 원하는 행동이 아닐 것입니다.
trutheality

@trutheality이 - 질문을 편집되기 전에 나는 그가 정확히 필요한 것을 이해 할 수 없습니다 그래서 그래, 내가, 내 대답을 쓰기 시작, 그게 내가 여기에는 몇 가지 옵션을 제공하는 이유입니다
Artsiom Rudzenka을

1
참고 : datetime 객체에는 'day'( 's'없음)라는 속성이 있고 timedelta 객체에는 구문이 작동하지 않는 이유에 당황한 경우를 대비하여 'days'( 's'포함)라는 속성이 있습니다.
Colton Hicks

3

시간, 분, 초 및 마이크로 초를 원하는대로 설정할 수 있습니다.

datetime.datetime.today().replace(hour=0, minute=0, second=0, microsecond=0)

그러나 진실성의 대답은 아마도 그들이 모두 0이 될 때 가장 좋을 것입니다. .date() 시간 s를

replace()한 번 대 수백 번의 호출 만 수행하면되므로 수백 개의 datetime을 비교해야하는 경우 더 빠를 수 있습니다.date()


돌연변이가 포함되지 않았다면 투표하겠습니다. 그러나 비교중인 datetime 개체의 복제본을 만든 다음 하루 이하 해상도로 필드를 제거하여 수정 한 다음 복사본을 비교하여이 방법을 조정할 수 있습니다.
ninjagecko 2011 년

1
@ninja, 그것은 변이하지 않습니다. 않습니다) (str.replace 같은 새로운 날짜 객체를 반환) (대체
존 라 Rooy

2
all(getattr(someTime,x)==getattr(today(),x) for x in ['year','month','day'])

를 사용하여 비교해야 .date()하지만, 예를 들어 월별 또는 분별로 비교하려는 경우를 대비하여이 방법을 예제로 남겨 둡니다.

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