[Datetime-SIG] Matching +-HH:MM in strptime

Oren Tirosh orent at hishome.net
Thu Oct 19 16:07:36 EDT 2017


https://github.com/orent/cpython/tree/strptime_extensions

%:z  - matches +HH:MM
%?:z - optional %:z
%.f  - equivalent to .%f
%?.f - optional %.f
%?t  - matches ' ' or 'T'

What they all have in common is that together they make it possible to
write a strptime format that matches all possible output variations of
datetime.__str__/ datetime.isoformat.

The time zone not only supports the : separator but also allows making the
entire component optional, as isoformat() will add it only for aware
datetime objects. The seconds fraction is dropped from the default string
representation if the datetime represents a whole second. Since it is
dropped along with the decimal dot, I first made "%.f" that includes the
dot and then created the optional variant. Finally, "%?t" can be used to
accept a timestamp with either of the separators defined in iso8601.

It is quite absurd that datetime cannot parse its own string
representation. Using these extensions an .isoparse() method may be added
that calls strptime('%Y-%m-%d%?t%H:%M:%S%?.f%?:z') and supports full
round-tripping of all possible datetime values that do not not use a custom
tzinfo.

Oren



On Thu, 19 Oct 2017 at 17:06, Paul G <paul at ganssle.io> wrote:
>
> There is a new issue about the %z directive in strptime on the issue
tracker: https://bugs.python.org/issue31800 (linked to a few related
issues), and a linked PR expanding the definition of %z to match HH:MM:
https://github.com/python/cpython/pull/4015
>
> I think either adding a %:z directive or expanding the definition of %z
would be pretty important, and I think there's a good case to be made for
either one. To summarize the arguments for people on the mailing list:
>
> The argument for expanding the definition of %z that I find strongest is
that according to the linux man pages (
http://man7.org/linux/man-pages/man3/strptime.3.html ), while %z generates
+-HHMM in strftime, strptime is supposed to match "An RFC-822/ISO 8601
standard timezone specification",and ISO 8601 uses +-HH:MM, so if we're
following those linux pages, we should be accepting the version with the
colon.
>
> The argument that I find most compelling for adding a %:z directive are:
>
>     1. maintains the symmetry between strftime and strptime
>     2. allows users to be stricter about their datetime format
>     3. has precedent in that GNU's `date` command accepts %z, %:z and
%::z formats
>
> Can we establish some consensus on which should be done so that it can be
implemented?
>
> Best,
>
> Paul
>
> _______________________________________________
> Datetime-SIG mailing list
> Datetime-SIG at python.org
> https://mail.python.org/mailman/listinfo/datetime-sig
> The PSF Code of Conduct applies to this mailing list:
https://www.python.org/psf/codeofconduct/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/datetime-sig/attachments/20171019/5d634fc9/attachment.html>


More information about the Datetime-SIG mailing list