-
[python] 파이썬 datetime() 함수로 살아온 연월일 계산하기(코딩 연습)코딩 연습/코딩배우기 2020. 9. 23. 22:23
■ main() 함수에 태어난 연월일을 인자로 넣으면 현재까지 살아온 총 일수와 연월일을 계산해주는 프로그램 코딩 연습(파이썬 초보자의 datetime() 함수 활용)
from datetime import datetime class PeriodFromBirth: month_days = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31) # 월(1~12)별 일수 def __init__(self, year, month, day): self.set_prd_birthday(year, month, day) def get_prd_birthday(self): # 생년월일에서 현재까지의 기간 등 print('당신은 태어나서 오늘까지 {0:,}일({1}년 {2}개월 {3}일)을 살았습니다.'\ .format(self.tday.days, self.years, self.month_cnt, self.days)) return [self.tday, self.years, self.month_cnt, self.days] def set_prd_birthday(self, year, month, day): self.ubirthday = datetime(year, month, day) self.now = datetime.now() self.tday = self.now - self.ubirthday # 총 일수 # self.tday는 <class 'datetime.timedelta'> self.leap_years = [n for n in range(self.ubirthday.year, self.now.year + 1) if n % 4 == 0 ] # 태어난 해부터 현재까지의 윤년 리스트 self.years = (self.tday.days - len(self.leap_years)) // 365 # 지난 총 연(年)수 self.days = (self.tday.days - len(self.leap_years)) % 365 # 연(年)수 제외한 올해 일수(단, 윤년 일수 제외) self.month_cnt = 0 # 올 해의 지난 월수 if self.ubirthday.month <= self.now.month and self.ubirthday.day <= self.now.day: for i in range(self.ubirthday.month + 1, self.now.month): if self.days - PeriodFromBirth.month_days[i-1] >= 0: self.month_cnt += 1 # 지난 월수 누적 self.days -= PeriodFromBirth.month_days[i-1] else: break self.days_left() else: for i in range(self.ubirthday.month + 1, 13): # 생년의 월 다음 월부터 12월말까지 if self.days - PeriodFromBirth.month_days[i-1] >= 0: self.month_cnt += 1 self.days -= PeriodFromBirth.month_days[i-1] else: break for i in range(1, self.now.month): # 1월부터 현재 월의 전월까지 if self.days - PeriodFromBirth.month_days[i-1] >= 0: self.month_cnt += 1 self.days -= PeriodFromBirth.month_days[i-1] else: break self.days_left() def days_left(self): # 남은 전체 일수를 월과 일로 구분하여 각각 계산 if self.days >= PeriodFromBirth.month_days[self.ubirthday.month-1]: self.m, self.d = divmod(self.days, PeriodFromBirth.month_days[self.ubirthday\ .month-1]) self.month_cnt += self.m self.days = self.d def __str__(self): return '당신은 태어나서 오늘까지 {0:,}일({1}년 {2}개월 {3}일)을 살았습니다.'\ .format(self.tday.days, self.years, self.month_cnt, self.days) def main(): pb = PeriodFromBirth(2000, 3, 14) #print(pb) tdelta = pb.get_prd_birthday() main()
[실행 결과]
당신은 태어나서 오늘까지 7,498일(20년 6개월 8일)을 살았습니다.
'코딩 연습 > 코딩배우기' 카테고리의 다른 글
[python] 파이썬 문자열 관련 함수들 (0) 2020.09.27 [python] 파이썬으로 비밀번호 유효성 검사하는 코딩하기 (0) 2020.09.24 [django] 파이썬 Django(장고) 템플릿 문법 (0) 2020.09.22 [python] 파이썬 스페셜 메소드 (Special Method) 사용 예제 (0) 2020.09.22 [python] 파이썬 재귀함수, 람다 함수 연습 (0) 2020.09.21