def _apply(self, value):
if isinstance(value, datetime):
parsed = value
elif isinstance(value, date):
# http://stackoverflow.com/a/1937636
parsed = datetime.combine(value, time.min)
else:
try:
#
# It's a shame we can't pass ``tzinfos`` to
# :py:meth:`dateutil_parse.parse`; ``tzinfos`` only has
# effect if we also specify ``ignoretz = True``, which
# we definitely don't want to do here!
#
# https://dateutil.readthedocs.org/en/latest/parser.html#dateutil.parser.parse
#
parsed = dateutil_parse(value)
except ValueError:
return self._invalid_value(
value = value,
reason = self.CODE_INVALID,
exc_info = True,
)
if not parsed.tzinfo:
parsed = parsed.replace(tzinfo=self.timezone)
# Always covert to UTC.
aware_result = parsed.astimezone(utc)
return (
aware_result.replace(tzinfo=None)
if self.naive
else aware_result
)
评论列表
文章目录