Update of /cvsroot/python/python/nondist/sandbox/datetime In directory sc8-pr-cvs1:/tmp/cvs-serv30549 Modified Files: datetime.py Log Message: Bunch of changes related to timetuple() etc.: - Rip out the basetime class. - Classes date and datetime should not support utctimetuple(); only datetimetz does. - Get rid of _mktime() method. - Implement date.timetuple() and datetime.timetuple() without using the time module. One caveat: the tm_yday field is currently left zero. Maybe Tim can show me how to implement it. This goes into internal method _jday(). - Implement datetimetz. utctimetuple() without using the time module. We construct a naive time from our data and a timedelta from the utc offset, subtract them, and get the timetuple() of the result. All this passes the test suite, but I've got a feeling some things aren't properly tested. Index: datetime.py =================================================================== RCS file: /cvsroot/python/python/nondist/sandbox/datetime/datetime.py,v retrieving revision 1.61 retrieving revision 1.62 diff -C2 -d -r1.61 -r1.62 *** datetime.py 7 Nov 2002 16:20:36 -0000 1.61 --- datetime.py 19 Nov 2002 17:41:40 -0000 1.62 *************** *** 249,272 **** - # XXX I don't think we should use this. Let's rip it out. - class basetime(object): - """Abstract date/time type. - - See http://effbot.org/ideas/time-type.htm - """ - - def timetuple(self): - raise NotImplementedError - - def utctimetuple(self): - raise NotImplementedError - - def __cmp__(self, other): - raise NotImplementedError - - def __hash__(self): - raise NotImplementedError - - class timedelta(object): """Represent the difference between two datetime objects. --- 249,252 ---- *************** *** 487,491 **** ! class date(basetime): """Concrete date type. --- 467,471 ---- ! class date(object): """Concrete date type. *************** *** 505,509 **** Methods: ! timetuple(), utctimetuple() toordinal() weekday(), isoweekday(), isocalendar() --- 485,489 ---- Methods: ! timetuple() toordinal() weekday(), isoweekday(), isocalendar() *************** *** 578,591 **** # Standard conversions, __cmp__, __hash__ (and helpers) ! # XXX These should be done without reference to the time module ! def _mktime(self): ! # Helper to return a POSIX-ish timestamp ! t = tmxxx(self.__year, self.__month, self.__day) ! return t.time() def timetuple(self): "Return local time tuple compatible with time.localtime()." ! return _time.localtime(self._mktime()) def toordinal(self): --- 558,572 ---- # Standard conversions, __cmp__, __hash__ (and helpers) ! def _yday(self): ! """Return tm_yday: day within the current year, where Jan 1 == 1. ! XXX This is not correct for now. Who cares. ! """ ! return 0 def timetuple(self): "Return local time tuple compatible with time.localtime()." ! return (self.__year, self.__month, self.__day, ! 0, 0, 0, self.weekday(), self._yday(), -1) def toordinal(self): *************** *** 624,628 **** def strftime(self, fmt): "Format using strftime()." ! return _time.strftime(fmt, _time.localtime(self._mktime())) # Computations --- 605,609 ---- def strftime(self, fmt): "Format using strftime()." ! return _time.strftime(fmt, self.timetuple()) # Computations *************** *** 734,738 **** Methods: ! timetuple(), utctimetuple() ctime() strftime() --- 715,719 ---- Methods: ! timetuple() ctime() strftime() *************** *** 824,839 **** # Standard conversions, __cmp__, __hash__ (and helpers) ! # XXX These should be done without reference to the time module ! ! def _mktime(self): ! # Helper to return a POSIX-ish timestamp ! t = tmxxx(self.__year, self.__month, self.__day, ! self.__hour, self.__minute, self.__second, ! self.__microsecond) ! return t.time() ! ! def utctimetuple(self): ! "Return UTC time tuple compatible with time.gmtime()." ! return _time.gmtime(self._mktime()) def __cmp__(self, other): --- 805,813 ---- # Standard conversions, __cmp__, __hash__ (and helpers) ! def timetuple(self): ! "Return local time tuple compatible with time.localtime()." ! return (self.__year, self.__month, self.__day, ! self.__hour, self.__minute, self.__second, ! self.weekday(), self._yday(), -1) def __cmp__(self, other): *************** *** 954,957 **** --- 928,958 ---- tzinfo = property(lambda self: self.__tzinfo, doc="timezone info object") + + def fromtimestamp(cls, t, tzinfo=None): + """Construct a datetimetz from a POSIX timestamp (like time.time()). + + A timezone info object may be passed in as well. + """ + y, m, d, hh, mm, ss, weekday, jday, dst = _time.localtime(t) + us = int((t % 1.0) * 1000000) + return cls(y, m, d, hh, mm, ss, us, tzinfo) + fromtimestamp = classmethod(fromtimestamp) + + def now(cls, tzinfo=None): + "Construct a datetime from time.time() and optional time zone info." + t = _time.time() + return cls.fromtimestamp(t, tzinfo) + now = classmethod(now) + + def utctimetuple(self): + "Return UTC time tuple compatible with time.gmtime()." + offset = self.utcoffset() + if not offset: # Either None or 0 + return self.timetuple() + ts = datetime(self.year, self.month, self.day, + self.hour, self.minute, self.second, + self.microsecond) + dt = timedelta(minutes=offset) + return (ts - dt).timetuple() def isoformat(self, sep=' '):
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4