blob: 1f02012224c63240496fd3154a387ef03df9eb37 [file] [log] [blame]
#!/usr/bin/env python3
# Copyright 2012 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Time-related utilities."""
import datetime
import unittest
from dateutil import tz
from cros.factory.utils import time_utils
class TimeUtilsTest(unittest.TestCase):
def testFormatElapsedTime(self):
self.assertEqual('00:00:00', time_utils.FormatElapsedTime(0))
self.assertEqual('-00:00:01', time_utils.FormatElapsedTime(-1))
self.assertEqual(
'01:02:03', time_utils.FormatElapsedTime(1 * 3600 + 2 * 60 + 3))
self.assertEqual(
'101:02:03', time_utils.FormatElapsedTime(101 * 3600 + 2 * 60 + 3))
def testTimeString(self):
dt = datetime.datetime(2014, 11, 5, 3, 47, 52, 443865)
stamp = 1415159272.443865
self.assertEqual('2014-11-05T03:47:52.443Z', time_utils.TimeString(dt))
self.assertEqual('2014-11-05T03:47:52.443Z', time_utils.TimeString(stamp))
self.assertEqual(
'2014-11-05T03-47-52.443Z', time_utils.TimeString(stamp, '-'))
self.assertEqual(
'2014-11-05T03|47|52Z', time_utils.TimeString(dt, '|', False))
def testDatetimeToUnixtime(self):
STD_TIME = 1514862245.678901
STD_DT = datetime.datetime.utcfromtimestamp(STD_TIME)
DST_TIME = 1533179045.678901
DST_DT = datetime.datetime.utcfromtimestamp(DST_TIME)
self.assertAlmostEqual(STD_TIME, time_utils.DatetimeToUnixtime(STD_DT))
dt_utc = STD_DT.replace(tzinfo=tz.gettz('UTC'))
self.assertAlmostEqual(STD_TIME, time_utils.DatetimeToUnixtime(dt_utc))
# UTC -5
dt_ny_std = STD_DT.replace(tzinfo=tz.gettz('America/New_York'))
self.assertAlmostEqual(STD_TIME + 5 * 60 * 60,
time_utils.DatetimeToUnixtime(dt_ny_std))
# UTC -4 (DST)
dt_ny_dst = DST_DT.replace(tzinfo=tz.gettz('America/New_York'))
self.assertAlmostEqual(DST_TIME + 4 * 60 * 60,
time_utils.DatetimeToUnixtime(dt_ny_dst))
# UTC +8
dt_tpe = STD_DT.replace(tzinfo=tz.gettz('Asia/Taipei'))
self.assertAlmostEqual(STD_TIME - 8 * 60 * 60,
time_utils.DatetimeToUnixtime(dt_tpe))
if __name__ == '__main__':
unittest.main()