return CONSTANT # fixed-offset class
return CONSTANT + self.dst(dt) # daylight-aware class
\end{verbatim}
-\end{methoddesc}
-\begin{methoddesc}{tzname}{self, dt}
- Return the timezone name corresponding to the \class{datetime} represented
- by \var{dt}, as a string. Nothing about string names is defined by the
- \module{datetime} module, and there's no requirement that it mean anything
- in particular. For example, "GMT", "UTC", "-500", "-5:00", "EDT",
- "US/Eastern", "America/New York" are all valid replies. Return
- \code{None} if a string name isn't known. Note that this is a method
- rather than a fixed string primarily because some \class{tzinfo} objects
- will wish to return different names depending on the specific value
- of \var{dt} passed, especially if the \class{tzinfo} class is
- accounting for daylight time.
+ If \method{utcoffset()} does not return \code{None},
+ \method{dst()} should not return \code{None} either.
+
+
\end{methoddesc}
+
\begin{methoddesc}{dst}{self, dt}
Return the daylight savings time (DST) adjustment, in minutes east of
UTC, or \code{None} if DST information isn't known. Return \code{0} if
but cannot detect violations; it's the programmer's responsibility to
ensure it.
+\begin{methoddesc}{tzname}{self, dt}
+ Return the timezone name corresponding to the \class{datetime} represented
+ by \var{dt}, as a string. Nothing about string names is defined by the
+ \module{datetime} module, and there's no requirement that it mean anything
+ in particular. For example, "GMT", "UTC", "-500", "-5:00", "EDT",
+ "US/Eastern", "America/New York" are all valid replies. Return
+ \code{None} if a string name isn't known. Note that this is a method
+ rather than a fixed string primarily because some \class{tzinfo} objects
+ will wish to return different names depending on the specific value
+ of \var{dt} passed, especially if the \class{tzinfo} class is
+ accounting for daylight time.
+\end{methoddesc}
+
\end{methoddesc}
These methods are called by a \class{datetimetz} or \class{timetz} object,
\begin{verbatim}
>>> from datetime import *
>>> class TZ(tzinfo):
-... def utcoffset(self, dt): return -399
+... def utcoffset(self, dt): return timedelta(minutes=-399)
...
>>> datetimetz(2002, 12, 25, tzinfo=TZ()).isoformat(' ')
'2002-12-25 00:00:00-06:39'
dston = datetimetz(2002, 4, 7, 2)
dstoff = datetimetz(2002, 10, 27, 2)
+ theclass = datetimetz
+
# Check a time that's inside DST.
def checkinside(self, dt, tz, utc, dston, dstoff):
self.assertEqual(dt.dst(), HOUR)
got = sixutc.astimezone(Eastern).astimezone(None)
self.assertEqual(expected, got)
+ def test_bogus_dst(self):
+ class ok(tzinfo):
+ def utcoffset(self, dt): return HOUR
+ def dst(self, dt): return HOUR
+
+ now = self.theclass.now().replace(tzinfo=utc_real)
+ # Doesn't blow up.
+ now.astimezone(ok())
+
+ # Does blow up.
+ class notok(ok):
+ def dst(self, dt): return None
+ self.assertRaises(ValueError, now.astimezone, notok())
+
+
def test_suite():
allsuites = [unittest.makeSuite(klass, 'test')
for klass in (TestModule,