You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
3.9 KiB
97 lines
3.9 KiB
#!/usr/bin/env python
|
|
"""\
|
|
Test time_format.py
|
|
"""
|
|
|
|
import os, time, unittest
|
|
|
|
from pyutil import time_format, increasing_timer
|
|
|
|
class TimeUtilTestCase(unittest.TestCase):
|
|
def setUp(self):
|
|
pass
|
|
|
|
def tearDown(self):
|
|
pass
|
|
|
|
def test_iso8601_utc_time(self, timer=increasing_timer.timer):
|
|
ts1 = time_format.iso_utc(timer.time() - 20)
|
|
ts2 = time_format.iso_utc()
|
|
assert ts1 < ts2, "failed: %s < %s" % (ts1, ts2)
|
|
ts3 = time_format.iso_utc(timer.time() + 20)
|
|
assert ts2 < ts3, "failed: %s < %s" % (ts2, ts3)
|
|
|
|
def test_iso_utc_time_to_localseconds(self, timer=increasing_timer.timer):
|
|
# test three times of the year so that a DST problem would hopefully be triggered
|
|
t1 = int(timer.time() - 365*3600/3)
|
|
iso_utc_t1 = time_format.iso_utc(t1)
|
|
t1_2 = time_format.iso_utc_time_to_seconds(iso_utc_t1)
|
|
assert t1 == t1_2, (t1, t1_2)
|
|
t1 = int(timer.time() - (365*3600*2/3))
|
|
iso_utc_t1 = time_format.iso_utc(t1)
|
|
t1_2 = time_format.iso_utc_time_to_seconds(iso_utc_t1)
|
|
self.failUnlessEqual(t1, t1_2)
|
|
t1 = int(timer.time())
|
|
iso_utc_t1 = time_format.iso_utc(t1)
|
|
t1_2 = time_format.iso_utc_time_to_seconds(iso_utc_t1)
|
|
self.failUnlessEqual(t1, t1_2)
|
|
|
|
def test_epoch(self):
|
|
return self._help_test_epoch()
|
|
|
|
def test_epoch_in_London(self):
|
|
# Europe/London is a particularly troublesome timezone. Nowadays, its
|
|
# offset from GMT is 0. But in 1970, its offset from GMT was 1.
|
|
# (Apparently in 1970 Britain had redefined standard time to be GMT+1
|
|
# and stayed in standard time all year round, whereas today
|
|
# Europe/London standard time is GMT and Europe/London Daylight
|
|
# Savings Time is GMT+1.) The current implementation of
|
|
# time_format.iso_utc_time_to_seconds() breaks if the timezone is
|
|
# Europe/London. (As soon as this unit test is done then I'll change
|
|
# that implementation to something that works even in this case...)
|
|
origtz = os.environ.get('TZ')
|
|
os.environ['TZ'] = "Europe/London"
|
|
if hasattr(time, 'tzset'):
|
|
time.tzset()
|
|
try:
|
|
return self._help_test_epoch()
|
|
finally:
|
|
if origtz is None:
|
|
del os.environ['TZ']
|
|
else:
|
|
os.environ['TZ'] = origtz
|
|
if hasattr(time, 'tzset'):
|
|
time.tzset()
|
|
|
|
def _help_test_epoch(self):
|
|
origtzname = time.tzname
|
|
s = time_format.iso_utc_time_to_seconds("1970-01-01T00:00:01Z")
|
|
self.failUnlessEqual(s, 1.0)
|
|
s = time_format.iso_utc_time_to_seconds("1970-01-01_00:00:01Z")
|
|
self.failUnlessEqual(s, 1.0)
|
|
s = time_format.iso_utc_time_to_seconds("1970-01-01 00:00:01Z")
|
|
self.failUnlessEqual(s, 1.0)
|
|
|
|
self.failUnlessEqual(time_format.iso_utc(1.0), "1970-01-01 00:00:01Z")
|
|
self.failUnlessEqual(time_format.iso_utc(1.0, sep="_"),
|
|
"1970-01-01_00:00:01Z")
|
|
|
|
now = time.time()
|
|
isostr = time_format.iso_utc(now)
|
|
timestamp = time_format.iso_utc_time_to_seconds(isostr)
|
|
self.failUnlessEqual(int(timestamp), int(now))
|
|
|
|
def my_time():
|
|
return 1.0
|
|
self.failUnlessEqual(time_format.iso_utc(t=my_time),
|
|
"1970-01-01 00:00:01Z")
|
|
self.failUnlessRaises(ValueError,
|
|
time_format.iso_utc_time_to_seconds,
|
|
"invalid timestring")
|
|
s = time_format.iso_utc_time_to_seconds("1970-01-01 00:00:01.500Z")
|
|
self.failUnlessEqual(s, 1.5)
|
|
|
|
# Look for daylight-savings-related errors.
|
|
thatmomentinmarch = time_format.iso_utc_time_to_seconds("2009-03-20 21:49:02.226536Z")
|
|
self.failUnlessEqual(thatmomentinmarch, 1237585742.226536)
|
|
self.failUnlessEqual(origtzname, time.tzname)
|
|
|