datetime 등을 이용한 날짜 계산

·2022년 11월 7일
0

TIL

목록 보기
31/46

파이썬으로 두 날짜의 차이 구하기

년, 월, 일로 다음과 같이 datetime.date 객체를 만들 수 있다

import datetime

day1 = datetime.date(2019, 12, 14)
day2= datetime.date(2021, 6, 5)

diff = day2 - day1
print(diff.days)

📒 년, 월, 일을 인수로 하여 2019년 12월 14일에 해당하는 날짜 객체는 day1, 2021년 6월 5일에 해당하는 날짜 객체는 day2로 생성한 후, 두 날의 차이를 계산하였다

📌 datetime.date는 년, 월, 일로만 구성된 날짜 데이터이므로 시, 분, 초까지 포함한 일시 데이터를 생성하려면 다음과 같이 datetime.datetime을 사용해야 한다

day3 = datetime.datetime(2020, 12, 14, 14, 10, 50)

print(day3.hour) #14
print(day3.minute) #10
print(day3.second) #50 

다음과 같이 combine() 함수로 datetime.date 객체와 datetime.time 객체를 합쳐 일시 데이터를 만들 수도 있다

day = datetime.date(2020, 12, 14)
time = datetime.time(10, 14, 50)

dt = datetime.datetime.combine(day, time)
print(dt)

요일 판별하기

요일은 datetime.date 객체의 weekday() 함수를 사용하면 쉽게 구할 수 있다

day = datetime.date(2019, 12, 14)
print(day.weekday())

0은 월요일을 의미하며 순서대로 1은 화요일, 2는 수요일, …, 6은 일요일이 된다. 이와는 달리 월요일은 1, 화요일은 2, …, 일요일은 7을 반환하려면 다음처럼 isoweekday() 함수를 사용하면 된다
예) day.isoweekday()

datetime.timedelta()

datetime.timedelta()도 두 날짜의 차이를 계산할 때 사용되는 함수이다. timedelta 객체에는 산술 연산자 +와 -를 사용할 수 있으므로 어떤 날짜에 원하는 기간(일, 시, 분, 초)을 더하거나 뺄 수 있다

🕚 오늘부터 사귀기 시작한 커플이 벌써 100일 기념일을 챙기려 한다. 이 커플의 100일 기념일은 언제일까?

풀이

import datetime
today = datetime.date.today() #2022년 11월 7일 
diff_days = datetime.timedelta(days=100)
print(today + diff_days)

출력 2023-02-15

🔹 timedelta에는 days 외에도 다음 표와 같은 매개변수를 사용할 수 있다

calendar.isleap

calendar.isleap()은 인수로 입력한 연도가 윤년인지를 확인할 때 사용하는 함수이다

🕦 여러분의 생일이 2월 29일이라면 어느 해가 2월 29일까지인 윤년인지 궁금할 것이다. 예를 들어 다음 연도가 윤년인지를 확인하려면 어떻게 해야 할까? (여기서는 윤년이면 True, 아니면 False를 출력)

풀이

그레고리력에서 윤년을 정하는 규칙은 다음과 같다
1. 서력 기원 연수가 4로 나누어 떨어지는 해는 우선 윤년으로 한다
2. 그중에서 100으로 나누어 떨어지는 해는 평년으로 한다
3. 400으로 나누어 떨어지는 해는 다시 윤년으로 정한다

  • 윤년의 2월달 일수는 28일이 아닌 29일이다

모듈을 사용하지 않는다면 아래와 몇 줄의 코드로 문제를 풀 수 있다

def is_leap_year(year):
    if year % 400 == 0: 
        return True
    if year % 100 == 0: 
        return False
    if year % 4 == 0: 
        return True
    return False

하지만 calendar 모듈을 사용하면 매우 간단하게 문제를 풀 수 있다

import calendar
print(calendar.isleap(0))
print(calendar.isleap(1))
print(calendar.isleap(2020))

0개의 댓글

관련 채용 정보