﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
32269	parse_duration() ISO string sign is ignored when the timedelta only has days	Hanno	starryrbs	"I'm pretty sure that this is a bug even though I'm not an expert on the ISO 8601 standard. The sign of a timedelta string will be ignored by `django.utils.dateparse.parse_duration` if the input string only contains days. Compare the following (notice the minus signs):



{{{
In [4]: timedelta(days=-1)
Out[4]: datetime.timedelta(days=-1)

In [5]: td = timedelta(days=-1)

In [6]: duration_iso_string(td)
Out[6]: '-P1DT00H00M00S'

In [7]: parse_duration(duration_iso_string(td))
Out[7]: datetime.timedelta(days=1)  # <-- Why is this 1 and not -1?

In [8]: td = timedelta(days=-1, microseconds=1)

In [9]: duration_iso_string(td)
Out[9]: '-P0DT23H59M59.999999S'

In [10]: parse_duration(duration_iso_string(td))
Out[10]: datetime.timedelta(days=-1, microseconds=1)

}}}


I guess the problem is in django/utils/dateparse.py line 147 that reads `return days + sign * datetime.timedelta(**kw)`.
However, if `datetime.timedelta(**kw)` ends up being zero (`timedelta(0)`) then the sign multiplication ends up in zero, not `-0`. This is just a preliminary quick look though and maybe the problem is something else."	Bug	closed	Utilities	3.1	Normal	fixed			Ready for checkin	1	0	0	0	0	0
