Strptime()を使用して2桁の年数は誕生日を非常によく解析することができません

StackOverflow https://stackoverflow.com/questions/3283209

  •  17-09-2020
  •  | 
  •  

質問

次の誕生日を検討します(dob):

  • 1-JUN-68
  • 1-JUN-69

Pythonのdatetime.strptime(dob, '%d-%b-%y')で解析されると、

  • datetime.datetime(2068, 6, 1, 0, 0)
  • datetime.datetime(1969, 6, 1, 0, 0)

もちろん彼らは同じ10年間で生まれたはずですが、今、それは同じ世紀以内でさえありません!

docs これは完全に有効な動作です:

2桁の年が受け入れられたとき、それらはに従って変換されます POSIXまたはX / OPEN標準:値69-99は1969-1999にマッピングされています。 そして、値0~68は2000-2068にマッピングされています。

なぜこの関数がこのように設定されているのかを理解していますが、これを回避する方法はありますか?おそらく2桁の年のためにあなた自身の範囲を定義することができますか?

役に立ちましたか?

解決

常に誕生日のためにそれを使っているならば、今年の後に100を引くだけで:

if d > datetime.now():
    d = datetime(d.year - 100, d.month, d.day)
.

他のヒント

この関数は年を1950年にシフトする:

def millenium(year, shift=1950):
    return (year-shift)%100 + shift
.

誕生日を期待している場合は、常にデータをマッサージすることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top