2012-06-26 17 views
34

最も単純なコードを使用して現在の年がPythonで指定されている場合は、次の年を印刷できます。今年から来年をPythonで印刷する方法

+1

私は%Y「time.strptime(」次のコードから「(time.strftimeを」「2005」を取得します2005-11-このコードに多くの変更を加えることなく '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 

を使用すると、変数に現在の年を持っている場合は、単に直接1を追加し、datetimeモジュールを気にする必要はありません:

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

あなたは、文字列の日付を持っている場合、ちょうど一年を表す4桁の数字を選択し、intに渡し:

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

年演算が非常に簡単です、それは整数にし、ちょうどそれがはるかに簡単で取得していない1を追加それよりもr。

しかし、あなたは全体の日付で作業している、とあなたは同じ日付を必要とするが、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機能を使用することができます。これを動作するように、絶対、フェイルセーフ正しい方法は、このようにある:

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(年= d.year + 1)'はValueErrorをスローします:dayは月の範囲外です。この場合を処理します。 – Duncan

+0

@Duncan:nice one;それで1年後の2月29日は何ですか? 3月1日? –

+2

通常は3月1日ですが、例外がある可能性があります。 2月29日に1年債を取ると、翌年3月1日に成熟すると思います。もちろん、お金の計算に入ると、実際には週末や祝日を飛び越えて少なくとも1年間は成熟します。 – Duncan

関連する問題