#28323 closed Cleanup/optimization (fixed)
Redundant use of normalize() in django.utils.timezone.localtime() and make_naive()
| Reported by: | Sergei Zh | Owned by: | nobody |
|---|---|---|---|
| Component: | Utilities | Version: | 1.10 |
| Severity: | Normal | Keywords: | |
| Cc: | Triage Stage: | Accepted | |
| Has patch: | yes | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description
I'm not 100% sure , but I didn't find any test on this and can't think of any.
What the purpose of using timezone.normalize method after dt.astimezone if pytz installed?
Current implementation of datetime.astimezone (according to python 2/3 docs):
def astimezone(self, tz):
if self.tzinfo is tz:
return self
# Convert self to UTC, and attach the new time zone object.
utc = (self - self.utcoffset()).replace(tzinfo=tz)
# Convert from UTC to tz's local time.
return tz.fromutc(utc)
The implementation of normalize method for StaticTzInfo is astimezone:
if dt.tzinfo is self:
return dt
if dt.tzinfo is None:
raise ValueError('Naive time - no tzinfo set')
return dt.astimezone(self)
And for DstTzInfo normalize implementation is the same as datetime.astimezone:
if dt.tzinfo is None:
raise ValueError('Naive time - no tzinfo set')
# Convert dt in localtime to UTC
offset = dt.tzinfo._utcoffset
dt = dt.replace(tzinfo=None)
dt = dt - offset
# convert it back, and return it
return self.fromutc(dt)
I've checked pytz 2011k and 2017.2 versions, looks like this code has never changed.
Also I found this conversation https://answers.launchpad.net/pytz/+question/249229
Change History (4)
comment:1 by , 8 years ago
| Has patch: | set |
|---|---|
| Summary: | Redundant use of `normalize` in `django.utils.localtime` → Redundant use of normalize() in django.utils.timezone.localtime() |
| Triage Stage: | Unreviewed → Accepted |
| Type: | Uncategorized → Cleanup/optimization |
comment:2 by , 8 years ago
| Summary: | Redundant use of normalize() in django.utils.timezone.localtime() → Redundant use of normalize() in django.utils.timezone.localtime() and make_naive() |
|---|
comment:4 by , 8 years ago
I was merely following the pytz docs, before they were updated in version 2016.4.
PR -- the tests seems to pass, so unless we're missing a test case to show why
normalize()is needed, I'd think your analysis is correct.