2012-06-26 3 views
34

가장 간단한 코드를 사용하여 파이썬으로 현재 연도가 주어진다면 다음 날을 어떻게 인쇄 할 수 있습니까? 한 줄에 datetime 모듈을 사용할 수 있습니다.내년을 파이썬으로 인쇄하는 방법

+1

난 '(time.strptime'다음 코드 'time.strftime ('%의 Y에서 2005-11-를 '2005'를 얻을 것이다 ','% Y- % m- % d '))'.. 이제이 코드에 많은 변화없이 '2006'을 얻는 것이 필요합니다. – Alchemist777

+1

'time.strptime ('2005-11-11', '%' Y- % m- % d '). tm_year + 1' – icecrime

+4

'print year + 1' – Matthias

답변

101

date 및 datetime 개체는 모두 숫자 인 year 특성을 갖습니다. 그냥 1을 추가

>>> from datetime import date 
>>> print date.today().year + 1 
2013 

당신이 변수에 현재 연도가있는 경우, 다만 직접 일을 추가 날짜 모듈을 귀찮게 할 필요가 없습니다 :

>>> year = 2012 
>>> print year + 1 
2013 

당신은 문자열에서 날짜가있는 경우 바로 올해 나타내는 4 자리 숫자를 선택하고 int에 전달 :

>>> date = '2012-06-26' 
>>> print int(date[:4]) + 1 
2013 

년 연산은 상당히 간단하다, 그것을 정수를하고 그냥 훨씬 간단하지 않습니다 1. 추가 그거보다.

경우, 그러나, 당신은 전체 날짜로 작업, 당신은 동일한 날짜를 필요로하지만 1 년 후, 하나씩 증가 년에 새로운 date 객체를 생성 할 구성 요소를 사용

>>> today = date.today() 
>>> print date(today.year + 1, today.month, today.day) 
2013-06-26 

today 2 월 29 일 윤년에있을 때이 조금 까다로운을 얻을 수

>>> print today.replace(year=today.year + 1) 
2013-06-26 

참고 : 또는 당신은 당신이 변경 지정한 필드 사본을 반환 .replace 기능을 사용할 수 있습니다. 절대은 페일 세이프 (fail-safe)이 하나를 작동하는 올바른 방법은 이렇게이다 :

def nextyear(dt): 
    try: 
     return dt.replace(year=dt.year+1) 
    except ValueError: 
     # February 29th in a leap year 
     # Add 365 days instead to arrive at March 1st 
     return dt + timedelta(days=365) 
+1

'.replace' 함수는 안정적으로 작동하지 않을 것입니다. 'd = date (2012, 2, 29)''d.replace (year = d.year + 1)'는 ValueError : day가 month의 범위를 벗어났습니다. 이 사건을 처리하라. – Duncan

+0

@Duncan : 멋진 하나; 그러면 1 년 후인 2 월 29 일은 무엇인가? 3 월 1 일? –

+2

보통 3 월 1 일이지만 예외가있을 수 있습니다. 2 월 29 일에 1 년 만기 채권을 사면 다음 해 3 월 1 일에 성숙 될 것으로 생각합니다. 물론 일단 돈 계산에 들어가면 주말과 은행 휴무일을 뛰어 넘는 적어도 1 년의 첫 근무일에 실제로 성숙해질 것입니다. – Duncan