Commit b54b674f authored by Guido van Rossum's avatar Guido van Rossum

Feature added by Bill van Melle: when no timezone is present, assume

local time -- that's better than failure.
parent e3d80d4e
...@@ -47,11 +47,13 @@ offset of the date's timezone from UTC (which is the official term ...@@ -47,11 +47,13 @@ offset of the date's timezone from UTC (which is the official term
for Greenwich Mean Time). (Note that the sign of the timezone offset for Greenwich Mean Time). (Note that the sign of the timezone offset
is the opposite of the sign of the \code{time.timezone} variable for is the opposite of the sign of the \code{time.timezone} variable for
the same timezone; the latter variable follows the \POSIX{} standard the same timezone; the latter variable follows the \POSIX{} standard
while this module follows \rfc{822}.) while this module follows \rfc{822}.) If the input string has no
timezone, the last element of the tuple returned is \code{None}.
\end{funcdesc} \end{funcdesc}
\begin{funcdesc}{mktime_tz}{tuple} \begin{funcdesc}{mktime_tz}{tuple}
Turn a 10-tuple as returned by \code{parsedate_tz()} into a UTC timestamp. Turn a 10-tuple as returned by \code{parsedate_tz()} into a UTC timestamp.
It the timezone item in the tuple is \code{None}, assume local time.
Minor deficiency: this first interprets the first 8 elements as a Minor deficiency: this first interprets the first 8 elements as a
local time and then compensates for the timezone difference; local time and then compensates for the timezone difference;
this may yield a slight error around daylight savings time this may yield a slight error around daylight savings time
......
...@@ -47,11 +47,13 @@ offset of the date's timezone from UTC (which is the official term ...@@ -47,11 +47,13 @@ offset of the date's timezone from UTC (which is the official term
for Greenwich Mean Time). (Note that the sign of the timezone offset for Greenwich Mean Time). (Note that the sign of the timezone offset
is the opposite of the sign of the \code{time.timezone} variable for is the opposite of the sign of the \code{time.timezone} variable for
the same timezone; the latter variable follows the \POSIX{} standard the same timezone; the latter variable follows the \POSIX{} standard
while this module follows \rfc{822}.) while this module follows \rfc{822}.) If the input string has no
timezone, the last element of the tuple returned is \code{None}.
\end{funcdesc} \end{funcdesc}
\begin{funcdesc}{mktime_tz}{tuple} \begin{funcdesc}{mktime_tz}{tuple}
Turn a 10-tuple as returned by \code{parsedate_tz()} into a UTC timestamp. Turn a 10-tuple as returned by \code{parsedate_tz()} into a UTC timestamp.
It the timezone item in the tuple is \code{None}, assume local time.
Minor deficiency: this first interprets the first 8 elements as a Minor deficiency: this first interprets the first 8 elements as a
local time and then compensates for the timezone difference; local time and then compensates for the timezone difference;
this may yield a slight error around daylight savings time this may yield a slight error around daylight savings time
......
...@@ -660,7 +660,7 @@ def parsedate_tz(data): ...@@ -660,7 +660,7 @@ def parsedate_tz(data):
tss = string.atoi(tss) tss = string.atoi(tss)
except string.atoi_error: except string.atoi_error:
return None return None
tzoffset=0 tzoffset=None
tz=string.upper(tz) tz=string.upper(tz)
if _timezones.has_key(tz): if _timezones.has_key(tz):
tzoffset=_timezones[tz] tzoffset=_timezones[tz]
...@@ -670,9 +670,12 @@ def parsedate_tz(data): ...@@ -670,9 +670,12 @@ def parsedate_tz(data):
except string.atoi_error: except string.atoi_error:
pass pass
# Convert a timezone offset into seconds ; -0500 -> -18000 # Convert a timezone offset into seconds ; -0500 -> -18000
if tzoffset<0: tzsign=-1 if tzoffset:
else: tzsign=1 if tzoffset < 0:
tzoffset=tzoffset*tzsign tzsign = -1
tzoffset = -tzoffset
else:
tzsign = 1
tzoffset = tzsign * ( (tzoffset/100)*3600 + (tzoffset % 100)*60) tzoffset = tzsign * ( (tzoffset/100)*3600 + (tzoffset % 100)*60)
tuple = (yy, mm, dd, thh, tmm, tss, 0, 0, 0, tzoffset) tuple = (yy, mm, dd, thh, tmm, tss, 0, 0, 0, tzoffset)
return tuple return tuple
...@@ -695,6 +698,10 @@ def mktime_tz(data): ...@@ -695,6 +698,10 @@ def mktime_tz(data):
switch dates. Not enough to worry about for common use. switch dates. Not enough to worry about for common use.
""" """
if data[9] is None:
# No zone info, so localtime is better assumption than GMT
return time.mktime(data[:8] + (-1,))
else:
t = time.mktime(data[:8] + (0,)) t = time.mktime(data[:8] + (0,))
return t - data[9] - time.timezone return t - data[9] - time.timezone
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment