I think this would be a much bigger change to the strptime interface than is actually warranted, and probably would add in additional, unnecessary complexity by introducing the concept of optional matches. Adding the capability to match HH:MM offsets is a reasonable extension partially because that is a standard representation that is currently *not* covered by strptime, and the fact that that's how isoformat() represents the offset just makes this lack all the more acute.
I think it should be uncontroversial to add *one* of these two %z extensions to Python 3 without getting bogged down in allowing a single strptime string to match any output from `.isoformat`.
That said, I'm also very much in favor of a `.isoparse` or `.fromisoformat` constructor that *is* the inverse of `isoformat`, which should solve the issue without sweeping changes to how `strptime` works.
On 10/19/2017 04:07 PM, Oren Tirosh wrote:
> %: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
> On Thu, 19 Oct 2017 at 17:06, Paul G <email@example.com> 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:
>> 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
>> 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
>> Datetime-SIG mailing list
>> The PSF Code of Conduct applies to this mailing list:
> Datetime-SIG mailing list
> The PSF Code of Conduct applies to this mailing list: https://www.python.org/psf/codeofconduct/
Datetime-SIG mailing list
The PSF Code of Conduct applies to this mailing list: https://www.python.org/psf/codeofconduct/