I reviewed and merged Paul's PR. I concur with Guido, the new
constructor perfectly makes sense and is useful.

About the implementation: date and time are crazy beasts. Extract of the code:

        if not 0 < week < 53:
            out_of_range = True

            if week == 53:
                # ISO years have 53 weeks in them on years starting with a
                # Thursday and leap years starting on a Wednesday
                first_weekday = _ymd2ord(year, 1, 1) % 7
                if (first_weekday == 4 or (first_weekday == 3 and
                                           _is_leap(year))):
                    out_of_range = False

            if out_of_range:
                raise ValueError(f"Invalid week: {week}")

"ISO years have 53 weeks in them on years starting with a Thursday and
leap years starting on a Wednesday" !?!

Victor

Le sam. 27 avr. 2019 à 22:37, Guido van Rossum <gu...@python.org> a écrit :
>
> I think it’s a good idea.
>
> On Sat, Apr 27, 2019 at 11:43 AM Paul Ganssle <p...@ganssle.io> wrote:
>>
>> Greetings,
>>
>> Some time ago, I proposed adding a `.fromisocalendar` alternate constructor 
>> to `datetime` (bpo-36004), with a corresponding implementation (PR #11888). 
>> I advertised it on datetime-SIG some time ago but haven't seen much 
>> discussion there, so I'd like to bring it to python-dev's attention as we 
>> near the cut-off for new Python 3.8 features.
>>
>> Other than the fact that I've needed this functionality in the past, I also 
>> think a good general principle for the datetime module is that when a class 
>> (time, date, datetime) has a "serialization" method (.strftime, .timestamp, 
>> .isoformat, .isocalendar, etc), there should be a corresponding 
>> deserialization method (.strptime, .fromtimestamp, .fromisoformat) that 
>> constructs a datetime from the output. Now that `fromisoformat` was 
>> introduced in Python 3.7, I think `isocalendar` is the only remaining method 
>> without an inverse. Do people agree with this principle? Should we add the 
>> `fromisocalendar` method?
>>
>> Thanks,
>> Paul
>>
>> _______________________________________________
>> Python-Dev mailing list
>> Python-Dev@python.org
>> https://mail.python.org/mailman/listinfo/python-dev
>> Unsubscribe: 
>> https://mail.python.org/mailman/options/python-dev/guido%40python.org
>
> --
> --Guido (mobile)
> _______________________________________________
> Python-Dev mailing list
> Python-Dev@python.org
> https://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe: 
> https://mail.python.org/mailman/options/python-dev/vstinner%40redhat.com



-- 
Night gathers, and now my watch begins. It shall not end until my death.
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to