2012-06-26 9 views
34

¿Cómo puedo imprimir el próximo año si el año actual se da en python usando el código más simple, posiblemente en una línea usando el módulo de fecha y hora?Cómo imprimir el próximo año del año en curso en Python

+1

i a conseguir '2005' del siguiente código 'time.strftime (' % Y 'time.strptime (' 2005-11- 11 ','% Y-% m-% d '))' .. ahora lo que necesito es obtener '2006' sin mucho cambio en este código – Alchemist777

+1

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

+4

'print year + 1' – Matthias

Respuesta

101

Ambos objetos de fecha y fecha y hora tienen un atributo year, que es un número. Sólo tiene que añadir 1:

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

Si tiene el año actual en una variable, basta con añadir 1 directamente, sin necesidad de molestar con el módulo de fecha y hora:

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

Si usted tiene la fecha en una cadena , basta con seleccionar los 4 dígitos que representan el año y pasarlo a int:

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

aritmética Año es extremadamente simple, que sea un número entero y sólo tiene que añadir 1. no puede ser mucho más sencillo r que eso.

Sin embargo, si se está trabajando con una fecha entera, y lo que necesita la misma fecha pero un año después, utilizar los componentes para crear un nuevo date objeto con el año incrementado en uno:

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

o puede utilizar la función .replace, que devuelve una copia con el campo del especificado cambiado:

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

Tenga en cuenta que esto puede ser un poco complicado cuando estamos en febrero today número 29 en un año bisiesto. El absoluto, a prueba de fallos forma correcta de trabajar de esta uno es así:

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

La función' .replace' no funcionará de manera confiable. 'd = date (2012, 2, 29)' 'd.replace (year = d.year + 1)' throws 'ValueError: el día está fuera de rango para el mes' y tampoco lo hará su opción anterior para construir un nuevo objeto de fecha manejar este caso. – Duncan

+0

@Duncan: agradable; la pregunta es, entonces, ¿qué es el 29 de febrero un año después? ¿01 de marzo? –

+2

Por lo general, el 1 de marzo pero podría haber excepciones. Si saca un bono de 1 año el 29 de febrero, entonces creo que madurará el 1 de marzo del año siguiente. Por supuesto, una vez que ingresa en los cálculos de dinero, en realidad madurará el primer día hábil que está al menos un año sin saltarse los fines de semana y días festivos. – Duncan

Cuestiones relacionadas