This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: datetime, date and time: strftime method takes different keyword argument: fmt (pure) or format (C)
Type: behavior Stage: patch review
Components: Extension Modules, Library (Lib) Versions: Python 3.11, Python 3.10, Python 3.9
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: Nosy List: AlexWaygood, Anthony Sottile, ZackerySpytz, belopolsky, p-ganssle, srittau
Priority: normal Keywords: patch

Created on 2020-07-09 17:01 by Anthony Sottile, last changed 2022-04-11 14:59 by admin.

Pull Requests
URL Status Linked Edit
PR 21712 open ZackerySpytz, 2020-08-03 05:50
Messages (6)
msg373407 - (view) Author: Anthony Sottile (Anthony Sottile) * Date: 2020-07-09 17:01
C:

https://github.com/python/cpython/blob/8b33961e4bc4020d8b2d5b949ad9d5c669300e89/Modules/_datetimemodule.c#L3183

pure python:

https://github.com/python/cpython/blob/8b33961e4bc4020d8b2d5b949ad9d5c669300e89/Lib/datetime.py#L927


this makes it difficult to properly type in mypy:

https://github.com/python/typeshed/blob/209b6bb127f61fe173a60776e23883ac450cf1c8/stdlib/2and3/datetime.pyi#L55

and calling with `.strftime(fmt=...)` or `.strftime(format=...)` is inconsistent

(that said, it should _probably_ be a positional-only argument)
msg373421 - (view) Author: Paul Ganssle (p-ganssle) * (Python committer) Date: 2020-07-09 19:06
I think a positional-only argument would be the best option if we could do it, but it would be a backwards-incompatible change and it's probably not worth the hassle.

If anyone is using the keyword argument, they're probably using `format=` rather than `fmt=`, since it's pretty rare for anyone to use the pure python version of datetime. PyPy uses it, but I think they tend to aim for consistency with the C API of CPython, and it seems like they already patch s/fmt/format/ themselves: https://foss.heptapod.net/pypy/pypy/-/blob/branch/default/lib_pypy/datetime.py#L781

If anyone wants to make a PR I think we can fix this for 3.10, though unfortunately because it is an API change it can't be backported. I think in typeshed they can safely change from `fmt` to `format` even today (which would almost certainly be more accurate to end user use cases).
msg373424 - (view) Author: Anthony Sottile (Anthony Sottile) * Date: 2020-07-09 19:42
awesome, I'm going to work through this with someone in my discord as a demo / mentorship opportunity -- hope that's ok!
msg406418 - (view) Author: Paul Ganssle (p-ganssle) * (Python committer) Date: 2021-11-16 16:56
Updating this issue to cover the problem in date, time and datetime.
msg406421 - (view) Author: Sebastian Rittau (srittau) * Date: 2021-11-16 18:30
Ref https://github.com/python/typeshed/pull/6317 for a discussion about this in typeshed.
msg406424 - (view) Author: Alex Waygood (AlexWaygood) * (Python triager) Date: 2021-11-16 19:27
In addition to `date.strftime` and `time.strftime`, there is also a discrepancy in `datetime.fromtimestamp`. In the C implementation, the first parameter is called "timestamp"; in the pure-Python implementation, the first parameter is called "t".
History
Date User Action Args
2022-04-11 14:59:33adminsetgithub: 85432
2021-11-16 19:27:41AlexWaygoodsetmessages: + msg406424
2021-11-16 18:35:25AlexWaygoodsetnosy: + AlexWaygood
2021-11-16 18:30:56srittausetnosy: + srittau
messages: + msg406421
2021-11-16 18:25:08AlexWaygoodsetversions: + Python 3.9, Python 3.11
2021-11-16 16:56:04p-gansslesetmessages: + msg406418
title: datetime: strftime method takes different keyword argument: fmt (pure) or format (C) -> datetime, date and time: strftime method takes different keyword argument: fmt (pure) or format (C)
2021-11-16 16:55:25p-gansslelinkissue45814 superseder
2020-08-03 05:50:20ZackerySpytzsetkeywords: + patch
nosy: + ZackerySpytz

pull_requests: + pull_request20856
stage: needs patch -> patch review
2020-07-09 19:42:04Anthony Sottilesetmessages: + msg373424
2020-07-09 19:06:30p-gansslesetnosy: - rkm

messages: + msg373421
stage: needs patch
2020-07-09 18:44:02rkmsetnosy: + rkm
2020-07-09 17:52:08xtreaksetnosy: + belopolsky, p-ganssle
2020-07-09 17:01:48Anthony Sottilecreate