[Python-checkins] python/nondist/sandbox/datetime Local.py,NONE,1.1

gvanrossum@users.sourceforge.net gvanrossum@users.sourceforge.net
Thu, 02 Jan 2003 15:11:04 -0800


Update of /cvsroot/python/python/nondist/sandbox/datetime
In directory sc8-pr-cvs1:/tmp/cvs-serv27103

Added Files:
	Local.py 
Log Message:
A really naive tzinfo class that tries to implement the notion of
"local time according to the time module".


--- NEW FILE: Local.py ---
"""A tzinfo object mirroring local time."""

import time as _time

from datetime import date, time, timedelta, datetime, datetimetz, tzinfo

STDOFFSET = timedelta(seconds = -_time.timezone)
if _time.daylight:
    DSTOFFSET = timedelta(seconds = -_time.altzone)
else:
    DSTOFFSET = STDOFFSET

ZERO = timedelta()
DSTDIFF = DSTOFFSET - STDOFFSET

class LocalTimezone(tzinfo):

    def utcoffset(self, dt):
        if self._isdst(dt):
            return DSTOFFSET
        else:
            return STDOFFSET

    def dst(self, dt):
        if self._isdst(dt):
            return DSTDIFF
        else:
            return ZERO

    def tzname(self, dt):
        return _time.tzname[self._isdst(dt)]

    def _isdst(self, dt):
        tt = (dt.year, dt.month, dt.day,
              dt.hour, dt.minute, dt.second,
              dt.weekday(), 0, -1)
        stamp = _time.mktime(tt)
        tt = _time.localtime(stamp)
        return tt[8] > 0

Local = LocalTimezone()

demo = """
*** This test only works in US/Eastern ***

Pick a time in standard time.

>>> dt = datetimetz(2003, 1, 2, 18, 05, 49)
>>> dt.isoformat()
'2003-01-02T18:05:49'
>>> dt = dt.replace(tzinfo=Local)
>>> dt.isoformat()
'2003-01-02T18:05:49-05:00'

Pick a time in DST.

>>> dt = datetimetz(2003, 7, 2, 18, 05, 49)
>>> dt.isoformat()
'2003-07-02T18:05:49'
>>> dt = dt.replace(tzinfo=Local)
>>> dt.isoformat()
'2003-07-02T18:05:49-04:00'
"""
__test__ = {'demo': demo}

def _test():
    import doctest, Local
    return doctest.testmod(Local)

if __name__ == "__main__":
    _test()