Paul Ganssle <p.gans...@gmail.com> added the comment:

This is probably more feasible than the proposal in bpo-41254 since it's a 
well-defined spec (mostly — it includes an optional alternative format and the 
number of digits allowed is defined "by agreement", thus defeating the purpose 
of using a spec in the first place) that's not even particularly difficult to 
implement, but there are still a few problems (and one reason I've never 
implemented this, despite desperately wanting a better string representation 
for time deltas). Two minor problems first:

1. Unlike ISO 8601 datetimes, these are not especially "human-friendly" 
formats, so I don't think they're especially useful for displaying timedeltas.

2. Also unlike ISO 8601 datetimes, I don't think these are in particularly wide 
use, or widely supported. That's not a major strike against it, but if it's not 
useful as something to show to humans and it's not especially useful as 
something to show to / read from other computers, that weighs against its 
inclusion in the standard library.

The biggest problem, however, is that `timedelta` does not and cannot represent 
"Year" or "Month", which means that `P1Y` or `P1M` would always need to be 
invalid to parse. We could eliminate this format, but it means that we would 
never at any point in the future be able to implement a parser for the full 
spec. Since the concept of a year and a month are ambiguous and at least the 
2016 version of ISO 8601 doesn't seem to define what it means for a duration to 
last 1 year or 1 month, you can't even really count on such a thing as an 
interchange format, because different implementations might give you different 
results! What does `20200131T00:00:00/P1M` represent? The interval (2020-01-31, 
2020-02-29)? (2020-01-31, 2020-03-02)? Something else?

A better target for parsing ISO 8601 durations would be something like 
`dateutil.relativedelta`, which does have defined semantics for years and 
months (though as I mentioned above, those are not necessarily consistent with 
the semantics of other libraries parsing or writing out this format).

I am also not entirely clear on whether "weeks" is just an alias for "7 days" 
or if it means something related to weeks in the ISO calendar (and if that 
makes a difference for durations).

I imagine that generating these formats is a bit more forgiving, because you 
would simply never generate the forbidden formats, and we can offer 
configuration options in the formatter method to allow the user to tweak the 
various ambiguities in the spec.

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue42094>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to