2011-11-28 6 views
6

下図のように私は、文字列からdatetimeオブジェクトを作成するためのステートメントを使用します。`datetime.strftime`と` datetime.strptime` interprete%のY異なり

t = datetime.strptime("0023-10-10", "%Y-%m-%d")

その後、どこかに私のコードの用途でtオブジェクトと同じフォーマットの文字列でstrftimeメソッドを呼び出す:これは、ValueError: year=23 is before 1900; the datetime strftime() methods require year >= 1900を引き起こす

t.strftime("%Y-%m-%d")

%Y入力の検証は、この2つの同様の方法では異なるようです。 だから、私は23のようないくつかの悪い年を受け入れないことを確認するために次の操作を実行する必要があります。

try: 
    format = "%Y-%m-%d" 
    t = datetime.strptime("0023-10-10", format) 
    t.strftime(format) 
except ValueError: 
    ... 

この検証を行うには良い方法がありますかしら。

答えて

4

私はtry..exceptを使用して入力を検証することをお勧めします。将来のバージョンのPythonでは、<年の年を入力できる可能性があります。

This commentは、この制限がPythonの現在のstrftimeの実装に限定されていることを示しています。 Pythonの2.7で


は、例外がyears < 1900で発生するが、Pythonの3.2 、例外がyears < 1000で発生:

import datetime as dt 
format = "%Y-%m-%d" 
t = dt.datetime.strptime("0023-10-10", format) 
try: 
    t.strftime(format) 
except ValueError as err: 
    print(err) 

プリント返信用

year=23 is before 1000; the datetime strftime() methods require year >= 1000 
+0

私はまだこの制限が 'strptime'に適用されない理由を理解していません。 – satoru

+1

'datetime.strftime'は、最終的にC関数strftimeを呼び出します。使用される実装は、Pythonのバージョンに応じて、years> = 1900または1000に制限されています。 strptimeはPythonで実装されており、同じ制限はありません。この[機能要求](http://bugs.python.org/issue1777412)を参照してください。 – unutbu

2

​​3210を確認してエラーが返ってくる場合は、意図的に例外を発生させる必要はありません。

+0

Thxを。ところで、これらのメソッドが異なる動作をする理由を知っていますか? – satoru

関連する問題