python / cpython

The Python programming language
https://www.python.org
Other
62.27k stars 29.91k forks source link

Behavior of datetime.datetime.strptime differs from documented behavior on %z #122781

Open Thomasillo opened 1 month ago

Thomasillo commented 1 month ago

Bug report

Bug description:

import datetime
datetime.datetime.strptime("2024-03-21T15:49:51", '%Y-%m-%dT%H:%M:%S%z')

will fail with ValueError: time data '2024-03-21T15:49:51' does not match format '%Y-%m-%dT%H:%M:%S%z'

From the documentation for strptime, empty string should be allowed here.

%z UTC offset in the form ±HHMM[SS[.ffffff]] (empty string if the object is naive). (empty), +0000, -0400, +1030, +063415, -030712.345216 (6)

NB: strftime behaves correctly.

 >>> datetime.datetime.strftime(datetime.datetime(2024, 3, 21, 15, 49, 51),  '%Y-%m-%dT%H:%M:%S%z')
'2024-03-21T15:49:51'

So strptime(strftime(datetime.datetime(2024, 3, 21, 15, 49, 51), '%Y-%m-%dT%H:%M:%S%z'), '%Y-%m-%dT%H:%M:%S%z') would fail.

CPython 3.12.4, WSL2 (Ubuntu 20.04)

CPython versions tested on:

3.12

Operating systems tested on:

Linux

Linked PRs

pygeek commented 1 month ago

Similar to:

midnightstardust commented 1 month ago

Linked a PR where I made %z allow an optional utc offset instead of mandating a utc offset, would appreciate it if someone could take a look, thanks!

https://github.com/python/cpython/pull/122829