Hi, Mathieu and list
I was also bothered by the fact that datetime can't parse its own __str__()
output. Instead of a custom parser I took a different approach. The
strptime implementation already has some extensions beyond posix/GNU, so
why not add a few more?
%:z - matches +HH:MM - this is a GNU date(1) extension
%?:z - optional version of %:z
%.f - equivalent to .%f
%?.f - optional version of %.f
%?t - matches either ' ' or 'T'
For symmetry, I proceeded to implement the same directives in strftime,
too. So with these changes in place, isoformat/fromisoformat are just
strftime/strptime with the format "%Y-%m-%d%?t%H:%M:%S%?.f%?:z".
The strftime implementation was more work and is not quite finished. It is
a python-only prototype (requires disabling import from C _datetime
module). It passes the tests but still has a couple of localization issues.
The code has languished in one of my repos for almost a year...
Your message reminded me of this unfinished bit. I will now rebase and dust
it off to see if there is interest on the list.
On Wed, 31 May 2017 at 22:27, Mathieu Dupuy <deronnax(a)gmail.com> wrote:
> Hi datetime mates
>
> I would like to resume soon the C implementation of datetime iso
> format parsing in CPython I started days ago
> (http://bugs.python.org/issue15873). Currently I have 2 solutions and
> would like to know which one do you prefer:
>
> * iterating on the string the string, stopping when something is wrong
> (might process almost all of the string and finally give up because
> last part is wrong, EG incorrect microseconds or time zone. Penalize
> invalid strings, best case when most of the strings to process are
> valid)
> * first checking the string is correct, then iterating over it and
> handling each part. Early detection of incorrect strings, useless
> overhead for valid string. Penalize valid strings, best case when most
> of the strings to process are invalid).
>
> I have a preference for solution #1. I first thought of using sscanf
> but it's impossible for many reasons, the first of them is scanf is
> unsuitable for variable numbers of match (you can't express optional
> match in scanf format).
>
> Waiting for your input.
> _______________________________________________
> Datetime-SIG mailing list
> Datetime-SIG(a)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/
>