Example #1
0
    def test_extended_datetime_arithmetic(self):
        zone = util.create_timezone(timedelta(hours=12, minutes=45))
        ext_dt = util.extended_datetime(0, 12, 31, 9, 17, 45, 14889, zone)
        self.assertEqual(ext_dt + timedelta(hours=20),
                         datetime(1, 1, 1, 5, 17, 45, 14889, zone))
        self.assertEqual(
            ext_dt - timedelta(hours=20),
            util.extended_datetime(0, 12, 30, 13, 17, 45, 14889, zone))
        self.assertEqual(ext_dt - ext_dt, timedelta(0))

        zone2 = util.create_timezone(timedelta(hours=-8, minutes=-31))
        ext_dt2 = util.extended_datetime(0, 11, 14, 13, 44, 20, 876543, zone2)
        expected_diff = timedelta(days=47,
                                  hours=-4,
                                  minutes=-27,
                                  seconds=25,
                                  microseconds=-861654)
        expected_diff -= timedelta(hours=20, minutes=76)
        self.assertEqual(ext_dt - ext_dt2, expected_diff)

        dt = datetime(400, 12, 31, 9, 17, 45, 14889, zone)
        self.assertEqual(
            dt - ext_dt,
            timedelta(days=util.extended_datetime.DAYS_IN_400_YEARS))
        self.assertEqual(
            ext_dt - dt,
            -timedelta(days=util.extended_datetime.DAYS_IN_400_YEARS))

        with self.assertRaises(TypeError):
            ext_dt - "test"
Example #2
0
    def test_timezone(self):
        delta_plus_5_42 = timedelta(hours=5, minutes=42)
        delta_minus_5_42 = -delta_plus_5_42

        # limited to +24h
        with self.assertRaises(ValueError):
            util.timezone(delta_plus_5_42 * 5)

        # limited to -24h
        with self.assertRaises(ValueError):
            util.timezone(delta_minus_5_42 * 5)

        # py2 implementation supports no sub-minutes time zones
        if py2:
            with self.assertRaises(ValueError):
                util.timezone(timedelta(hours=5, minutes=42, seconds=13))

            with self.assertRaises(ValueError):
                util.timezone(timedelta(hours=5, minutes=42, microseconds=13))

        # test __eq__
        tz0 = util.timezone(delta_plus_5_42)
        tz1 = util.timezone(delta_minus_5_42)
        self.assertEqual(tz0, tz0)
        self.assertEqual(tz1, tz1)
        self.assertNotEqual(tz0, tz1)
        self.assertFalse(tz0 == "not equal to a str")

        # test tzname
        self.assertEqual('5_42',
                         util.timezone(delta_plus_5_42, '5_42').tzname(None))
        self.assertEqual('UTC+05:42',
                         util.timezone(delta_plus_5_42).tzname(None))
        self.assertEqual('UTC-05:42',
                         util.timezone(delta_minus_5_42).tzname(None))
        if py2 or sys.version_info >= (3, 6):
            # bpo22241
            self.assertEqual('UTC', util.timezone(timedelta(0)).tzname(None))

        # test utcoffset
        self.assertEqual(delta_minus_5_42,
                         util.timezone(delta_minus_5_42).utcoffset(None))

        # test dst
        self.assertTrue(
            util.timezone(delta_minus_5_42).dst(None) in set((timedelta(0),
                                                              None)))

        # test create_timezone
        self.assertTrue(
            util.create_timezone(delta_plus_5_42) is util.create_timezone(
                timedelta(hours=5, minutes=42)))
        self.assertFalse(
            util.create_timezone(delta_plus_5_42) is util.create_timezone(
                delta_minus_5_42))
Example #3
0
 def test_extended_datetime_timestamp(self):
     if sys.version_info >= (3, 3):
         zone = util.create_timezone(timedelta(hours=12, minutes=45))
         ext_dt = util.extended_datetime(0, 12, 31, 23, 0, 0, 14889, zone)
         dt = datetime(1, 1, 1, 0, 0, 0, 14889, zone)
         self.assertTrue(
             abs(dt.timestamp() - ext_dt.timestamp() - 3600.0) < 0.0000001)
Example #4
0
 def test_extended_datetime_replace(self):
     zone = util.create_timezone(timedelta(hours=12, minutes=45))
     ext_dt = util.extended_datetime(0, 1, 1, 23, tzinfo=zone)
     self.assertEqual(ext_dt.replace(year=2040, minute=59),
                      datetime(2040, 1, 1, 23, 59, tzinfo=zone))
     self.assertEqual(ext_dt.replace(minute=59),
                      util.extended_datetime(0, 1, 1, 23, 59, tzinfo=zone))
Example #5
0
    def test_extended_datetime_compare(self):
        self.assertTrue(util.extended_datetime(0, 1, 1) < datetime(1, 1, 1))
        self.assertTrue(util.extended_datetime(0, 1, 1) <= datetime(1, 1, 1))
        self.assertTrue(util.extended_datetime(0, 1, 1) != datetime(1, 1, 1))
        self.assertFalse(util.extended_datetime(0, 1, 1) == datetime(1, 1, 1))
        self.assertFalse(util.extended_datetime(0, 1, 1) >= datetime(1, 1, 1))
        self.assertFalse(util.extended_datetime(0, 1, 1) > datetime(1, 1, 1))

        self.assertFalse(util.extended_datetime(0, 1, 1) < util.extended_datetime(0, 1, 1))
        self.assertTrue(util.extended_datetime(0, 1, 1) <= util.extended_datetime(0, 1, 1))
        self.assertFalse(util.extended_datetime(0, 1, 1) != util.extended_datetime(0, 1, 1))
        self.assertTrue(util.extended_datetime(0, 1, 1) == util.extended_datetime(0, 1, 1))
        self.assertTrue(util.extended_datetime(0, 1, 1) >= util.extended_datetime(0, 1, 1))
        self.assertFalse(util.extended_datetime(0, 1, 1) > util.extended_datetime(0, 1, 1))

        self.assertTrue(util.extended_datetime(0, 1, 1) < util.extended_datetime(0, 1, 2))
        self.assertTrue(util.extended_datetime(0, 1, 1) <= util.extended_datetime(0, 1, 2))
        self.assertTrue(util.extended_datetime(0, 1, 1) != util.extended_datetime(0, 1, 2))
        self.assertFalse(util.extended_datetime(0, 1, 1) == util.extended_datetime(0, 1, 2))
        self.assertFalse(util.extended_datetime(0, 1, 1) >= util.extended_datetime(0, 1, 2))
        self.assertFalse(util.extended_datetime(0, 1, 1) > util.extended_datetime(0, 1, 2))

        self.assertFalse(util.extended_datetime(0, 1, 3) < util.extended_datetime(0, 1, 2))
        self.assertFalse(util.extended_datetime(0, 1, 3) <= util.extended_datetime(0, 1, 2))
        self.assertTrue(util.extended_datetime(0, 1, 3) != util.extended_datetime(0, 1, 2))
        self.assertFalse(util.extended_datetime(0, 1, 3) == util.extended_datetime(0, 1, 2))
        self.assertTrue(util.extended_datetime(0, 1, 3) >= util.extended_datetime(0, 1, 2))
        self.assertTrue(util.extended_datetime(0, 1, 3) > util.extended_datetime(0, 1, 2))
        self.assertTrue(
            util.extended_datetime(0, 12, 31, 21, 4, 5, 6, util.create_timezone(timedelta(hours=-8)))
            == datetime(1, 1, 1, 5, 4, 5, 6, utc)
        )
        self.assertTrue(
            util.extended_datetime(0, 12, 31, 21, 4, 5, 6, util.create_timezone(timedelta(hours=-8)))
            == datetime(1, 1, 1, 5, 7, 5, 6, util.create_timezone(timedelta(hours=0, minutes=3)))
        )
        self.assertFalse(
            util.extended_datetime(0, 12, 31, 21, 4, 5, 6, util.create_timezone(timedelta(hours=-7)))
            == datetime(1, 1, 1, 5, 4, 5, 6, utc)
        )
        self.assertFalse(util.extended_datetime(0, 1, 1) == util.extended_datetime(0, 1, 1, tzinfo=utc))
        self.assertFalse(util.extended_datetime(0, 1, 1) == "0000-01-01")

        with self.assertRaises(TypeError):
            util.extended_datetime(0, 1, 1) < "0000-01-02"
Example #6
0
 def test_extended_datetime_properties(self):
     zone = util.create_timezone(timedelta(hours=12, minutes=45))
     dt = util.extended_datetime(0, 11, 27, 5, 44, 31, 14889, zone)
     self.assertEqual(dt.year, 0)
     self.assertEqual(dt.month, 11)
     self.assertEqual(dt.day, 27)
     self.assertEqual(dt.hour, 5)
     self.assertEqual(dt.minute, 44)
     self.assertEqual(dt.second, 31)
     self.assertEqual(dt.microsecond, 14889)
     self.assertEqual(dt.tzinfo, zone)
Example #7
0
    def test_extended_datetime_encodings(self):
        zone = util.create_timezone(timedelta(hours=12, minutes=45))

        # test with microseconds
        ext_dt = util.extended_datetime(0, 2, 29, 9, 17, 45, 14889, zone)
        self.assertEqual(str(ext_dt), '0000-02-29 09:17:45.014889+12:45')
        if py2:
            self.assertEqual(unicode(ext_dt), '0000-02-29 09:17:45.014889+12:45')  # noqa: F821

        # test without microseconds
        ext_dt = util.extended_datetime(0, 2, 29, 9, 17, 45, 0, zone)
        self.assertEqual(str(ext_dt), '0000-02-29 09:17:45+12:45')
        if py2:
            self.assertEqual(unicode(ext_dt), '0000-02-29 09:17:45+12:45')  # noqa: F821
Example #8
0
 def tz(hours, minutes=0):
     return util.create_timezone(timedelta(hours=hours,
                                           minutes=minutes))