Warum liefert "Strftime ("%y ")` kein 4-stelliges Jahr für Daten <1000 Anzeigen im DateTime-Modul von Python unter Linux

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Warum liefert "Strftime ("%y ")` kein 4-stelliges Jahr für Daten <1000 Anzeigen im DateTime-Modul von Python unter Linux

by Anonymous » 23 Apr 2025, 11:10

Ich bin verwirrt von einer Inkonsistenz beim Aufrufen von .Strftime () für Daten, die vor-1000 Anzeigen sind, und verwenden Sie Pythons DateTime Modul.

Code: Select all

import datetime
old_date = datetime.date(year=33, month=3, day=28)  # 28th March 33AD

old_date.isoformat()
>>> "0033-03-28"  # Fine!

old_date.strftime("%Y-%m-%d")
>>> "33-03-28"  # Woah - where did my leading zeros go?

# And even worse
datetime.datetime.strptime(old_date.strftime("%Y-%m-%d"), "%Y-%m-%d")
>>>
...
File "", line 1, in 
File "/usr/lib/python3.12/_strptime.py", line 554, in _strptime_datetime
tt, fraction, gmtoff_fraction = _strptime(data_string, format)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/_strptime.py", line 333, in _strptime
raise ValueError("time data %r does not match format %r" %
ValueError: time data '33-03-28' does not match format '%Y-%m-%d'
Die Dokumentation zeigt Beispiele für %y Erfolge von Jahren mit Null-Padd-Jahren. Selbst mit %g , das als ISO-8601-4-stelliges Jahr dokumentiert ist, zeigt nur zwei Ziffern. Dies, da dies zu offensichtlich erscheint, um in Python ein Fehler zu sein. Ich benutze Python 3.12 auf Ubuntu 24.04.

Top