2012-06-26 14 views
34

Geçerli yıl python'da en basit kodu kullanarak, muhtemelen datetime modülünü kullanarak bir satırda, bir sonraki yıl nasıl basabilirim.Python'da bir sonraki yıla nasıl basılır

+1

i '(, time.strptime' Aşağıdaki kodu 'time.strftime (' % Y den 2005-11- '2005' alacak 11 ','% Y-% m-% d '))' .. şimdi ihtiyacım olan şey bu kodu çok fazla değiştirmeden '2006' almaktır – Alchemist777

+1

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

+4

'baskı yılı + 1 ' – Matthias

cevap

101

Hem tarih hem de datetime nesnelerine bir sayı olan year özniteliği vardır. Sadece 1 ekleyin:

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

bir değişkene geçerli yılı varsa, sadece doğrudan 1 ekleyin, datetime modülü ile uğraşmaya gerek yok:

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

Bir dizesinde tarihi varsa sadece yıl temsil 4 haneyi seçin ve int iletecek:

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

yıl aritmetik fazlasıyla basit, o bir tamsayı yapmak ve sadece çok daha basit almaz 1. ekleyin Bundan daha iyi.

ise ancak, bütün bir tarih ile çalışıyorsanız ve aynı tarihine gerek ama bir yıl sonra, bir artırılır yıl ile yeni date nesnesi oluşturmak için bileşenleri kullanır:

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

today 29 Şubat bir sıçrama yıl içinde olduğunda bu biraz zor alabilirsiniz

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

Not: ya sen değişti belirtin alanıyla bir kopyasını döndürür .replace işlevini kullanabilirsiniz. Mutlak hata güvenliği bu bir işe doğru yol olduğunu böylece:

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' işlevi güvenilir şekilde çalışmayacaktır. d = date (2012, 2, 29) '' d.replace (yıl = d.year + 1) '' ValueError atar: gün ay için aralık dışıdır ve yeni bir tarih nesnesi oluşturmak için önceki seçeneğiniz de olmaz Bu davayı hallet. – Duncan

+0

@Duncan: hoş biri; Soru şu ki, bir yıl sonra 29 Şubat nedir? 1 Mart? –

+2

Genellikle 1 Mart ancak istisnalar olabilir. 29 Şubat'ta 1 yıllık bir tahvil çıkarırsanız, bir sonraki yıl 1 Mart'ta olgunlaşacağını düşünüyorum. Tabii ki, para hesaplarına girdiğinizde, ilk iş gününde, hafta sonları ve resmi tatil günlerinde en az bir yıl geçecek şekilde olgunlaşacaktır. – Duncan

İlgili konular