diff --git a/roundup/date.py b/roundup/date.py
index cedc6d4954e2189605e807ca786128385357b0a8..1f3f977b7421645beec00a3ca076aa1312832fc8 100644 (file)
--- a/roundup/date.py
+++ b/roundup/date.py
serving as translation functions.
"""
self.setTranslator(translator)
+ # Python 2.3+ datetime object
+ # common case when reading from database: avoid double-conversion
+ if isinstance(spec, datetime.datetime):
+ if offset == 0:
+ self.year, self.month, self.day, self.hour, self.minute, \
+ self.second = spec.timetuple()[:6]
+ else:
+ TZ = get_timezone(tz)
+ self.year, self.month, self.day, self.hour, self.minute, \
+ self.second = TZ.localize(spec).utctimetuple()[:6]
+ self.second += spec.microsecond/1000000.
+ return
+
if type(spec) == type(''):
self.set(spec, offset=offset, add_granularity=add_granularity)
return
- elif isinstance(spec, datetime.datetime):
- # Python 2.3+ datetime object
- y,m,d,H,M,S,x,x,x = spec.timetuple()
- S += spec.microsecond/1000000.
- spec = (y,m,d,H,M,S,x,x,x)
elif hasattr(spec, 'tuple'):
spec = spec.tuple()
elif isinstance(spec, Date):
def __cmp__(self, other):
"""Compare this interval to another interval."""
+
if other is None:
# we are always larger than None
return 1
- for attr in 'sign year month day hour minute second'.split():
- r = cmp(getattr(self, attr), getattr(other, attr))
- if r:
- return r
- return 0
+ return cmp(self.as_seconds(), other.as_seconds())
def __str__(self):
"""Return this interval as a string."""