ABOUT ME

IT와 컴퓨터 관련 팁, 파이썬 등과 아파트 정보, 일상적인 경험 등의 생활 정보를 정리해서 올리는 개인 블로그

  • [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()
    

    good4me.co.kr

     

    [실행 결과]

    당신은 태어나서 오늘까지 7,498일(20년 6개월 8일)을 살았습니다.

     

     

Designed by goodthings4me.