6

次の誕生日を考えてみましょう (としてdob):

  • 1968 年 6 月 1 日
  • 1969 年 6 月 1 日

Python で解析すると、次のdatetime.strptime(dob, '%d-%b-%y')ようになります。

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

もちろん、彼らは同じ 10 年に生まれたはずですが、今では同じ世紀でもありません。

ドキュメントによると、これは完全に有効な動作です。

2 桁の年が受け入れられる場合、それらは POSIX または X/Open 標準に従って変換されます。値 69 から 99 は 1969 から 1999 にマップされ、値 0 から 68 は 2000 から 2068 にマップされます。

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

4

3 に答える 3

12

いつも誕生日に使用している場合、年が今以降の場合は100を引くだけです。

if d > datetime.now():
    d = datetime(d.year - 100, d.month, d.day)
于 2010-07-19T17:07:45.273 に答える
2

この関数は、年を 1950 にシフトします。

def millenium(year, shift=1950):
    return (year-shift)%100 + shift
于 2010-07-19T17:12:29.927 に答える
0

誕生日を期待している場合は、いつでも手動でデータをマッサージすることができます。将来の日付は自動的に1世紀、またはそのようなものに戻されます。

于 2010-07-19T17:07:47.957 に答える