Exemplo n.º 1
0
 def test_timezones(self):
     # Saving and updating with timezone-aware datetime Python objects.
     # Regression test for #10443.
     # The idea is that all these creations and saving should work without
     # crashing. It's not rocket science.
     dt1 = datetime.datetime(2008,
                             8,
                             31,
                             16,
                             20,
                             tzinfo=get_fixed_timezone(600))
     dt2 = datetime.datetime(2008,
                             8,
                             31,
                             17,
                             20,
                             tzinfo=get_fixed_timezone(600))
     obj = Article.objects.create(headline="A headline",
                                  pub_date=dt1,
                                  article_text="foo")
     obj.pub_date = dt2
     obj.save()
     self.assertEqual(
         Article.objects.filter(headline="A headline").update(pub_date=dt1),
         1)
Exemplo n.º 2
0
    def test_parse_datetime(self):
        valid_inputs = (
            ('2012-04-23T09:15:00', datetime(2012, 4, 23, 9, 15)),
            ('2012-4-9 4:8:16', datetime(2012, 4, 9, 4, 8, 16)),
            ('2012-04-23T09:15:00Z',
             datetime(2012, 4, 23, 9, 15, 0, 0, get_fixed_timezone(0))),
            ('2012-4-9 4:8:16-0320',
             datetime(2012, 4, 9, 4, 8, 16, 0, get_fixed_timezone(-200))),
            ('2012-04-23T10:20:30.400+02:30',
             datetime(2012, 4, 23, 10, 20, 30, 400000,
                      get_fixed_timezone(150))),
            ('2012-04-23T10:20:30.400+02',
             datetime(2012, 4, 23, 10, 20, 30, 400000,
                      get_fixed_timezone(120))),
            ('2012-04-23T10:20:30.400-02',
             datetime(2012, 4, 23, 10, 20, 30, 400000,
                      get_fixed_timezone(-120))),
        )
        for source, expected in valid_inputs:
            with self.subTest(source=source):
                self.assertEqual(parse_datetime(source), expected)

        # Invalid inputs
        self.assertIsNone(parse_datetime('20120423091500'))
        with self.assertRaises(ValueError):
            parse_datetime('2012-04-56T09:15:90')
Exemplo n.º 3
0
def parse_datetime(value):
    """Parse a string and return a datetime.datetime.

    This function supports time zone offsets. When the input contains one,
    the output uses a timezone with a fixed offset from UTC.

    Raise ValueError if the input is well formatted but not a valid datetime.
    Return None if the input isn't well formatted.
    """
    match = datetime_re.match(value)
    if match:
        kw = match.groupdict()
        kw['microsecond'] = kw['microsecond'] and kw['microsecond'].ljust(6, '0')
        tzinfo = kw.pop('tzinfo')
        if tzinfo == 'Z':
            tzinfo = utc
        elif tzinfo is not None:
            offset_mins = int(tzinfo[-2:]) if len(tzinfo) > 3 else 0
            offset = 60 * int(tzinfo[1:3]) + offset_mins
            if tzinfo[0] == '-':
                offset = -offset
            tzinfo = get_fixed_timezone(offset)
        kw = {k: int(v) for k, v in kw.items() if v is not None}
        kw['tzinfo'] = tzinfo
        return datetime.datetime(**kw)
Exemplo n.º 4
0
    def test_timezones(self):
        my_birthday = datetime(1979, 7, 8, 22, 00)
        summertime = datetime(2005, 10, 30, 1, 00)
        wintertime = datetime(2005, 10, 30, 4, 00)
        timestamp = datetime(2008, 5, 19, 11, 45, 23, 123456)

        # 3h30m to the west of UTC
        tz = get_fixed_timezone(-210)
        aware_dt = datetime(2009, 5, 16, 5, 30, 30, tzinfo=tz)

        if TZ_SUPPORT:
            self.assertEqual(dateformat.format(my_birthday, 'O'), '+0100')
            self.assertEqual(dateformat.format(my_birthday, 'r'), 'Sun, 8 Jul 1979 22:00:00 +0100')
            self.assertEqual(dateformat.format(my_birthday, 'T'), 'CET')
            self.assertEqual(dateformat.format(my_birthday, 'e'), '')
            self.assertEqual(dateformat.format(aware_dt, 'e'), '-0330')
            self.assertEqual(dateformat.format(my_birthday, 'U'), '300315600')
            self.assertEqual(dateformat.format(timestamp, 'u'), '123456')
            self.assertEqual(dateformat.format(my_birthday, 'Z'), '3600')
            self.assertEqual(dateformat.format(summertime, 'I'), '1')
            self.assertEqual(dateformat.format(summertime, 'O'), '+0200')
            self.assertEqual(dateformat.format(wintertime, 'I'), '0')
            self.assertEqual(dateformat.format(wintertime, 'O'), '+0100')

        # Ticket #16924 -- We don't need timezone support to test this
        self.assertEqual(dateformat.format(aware_dt, 'O'), '-0330')
Exemplo n.º 5
0
 def test_serialize_datetime(self):
     self.assertSerializedEqual(datetime.datetime.utcnow())
     self.assertSerializedEqual(datetime.datetime.utcnow)
     self.assertSerializedEqual(datetime.datetime.today())
     self.assertSerializedEqual(datetime.datetime.today)
     self.assertSerializedEqual(datetime.date.today())
     self.assertSerializedEqual(datetime.date.today)
     self.assertSerializedEqual(datetime.datetime.now().time())
     self.assertSerializedEqual(
         datetime.datetime(2014, 1, 1, 1, 1, tzinfo=get_default_timezone()))
     self.assertSerializedEqual(
         datetime.datetime(2013,
                           12,
                           31,
                           22,
                           1,
                           tzinfo=get_fixed_timezone(180)))
     self.assertSerializedResultEqual(
         datetime.datetime(2014, 1, 1, 1, 1),
         ("datetime.datetime(2014, 1, 1, 1, 1)", {'import datetime'}))
     self.assertSerializedResultEqual(
         datetime.datetime(2012, 1, 1, 1, 1, tzinfo=utc), (
             "datetime.datetime(2012, 1, 1, 1, 1, tzinfo=utc)",
             {'import datetime', 'from djmodels.utils.timezone import utc'},
         ))
Exemplo n.º 6
0
 def test_datetime_with_tzinfo(self):
     tz = get_fixed_timezone(-510)
     ltz = get_default_timezone()
     dt = make_aware(datetime(2009, 5, 16, 5, 30, 30), ltz)
     self.assertEqual(datetime.fromtimestamp(int(format(dt, 'U')), tz), dt)
     self.assertEqual(datetime.fromtimestamp(int(format(dt, 'U')), ltz), dt)
     # astimezone() is safe here because the target timezone doesn't have DST
     self.assertEqual(datetime.fromtimestamp(int(format(dt, 'U'))), dt.astimezone(ltz).replace(tzinfo=None))
     self.assertEqual(datetime.fromtimestamp(int(format(dt, 'U')), tz).utctimetuple(), dt.utctimetuple())
     self.assertEqual(datetime.fromtimestamp(int(format(dt, 'U')), ltz).utctimetuple(), dt.utctimetuple())
Exemplo n.º 7
0
 def test_make_aware_no_tz(self):
     self.assertEqual(
         timezone.make_aware(datetime.datetime(2011, 9, 1, 13, 20, 30)),
         datetime.datetime(2011,
                           9,
                           1,
                           13,
                           20,
                           30,
                           tzinfo=timezone.get_fixed_timezone(-300)))
Exemplo n.º 8
0
    def test_naturalday_tz(self):
        today = datetime.date.today()
        tz_one = get_fixed_timezone(-720)
        tz_two = get_fixed_timezone(720)

        # Can be today or yesterday
        date_one = datetime.datetime(today.year,
                                     today.month,
                                     today.day,
                                     tzinfo=tz_one)
        naturalday_one = humanize.naturalday(date_one)
        # Can be today or tomorrow
        date_two = datetime.datetime(today.year,
                                     today.month,
                                     today.day,
                                     tzinfo=tz_two)
        naturalday_two = humanize.naturalday(date_two)

        # As 24h of difference they will never be the same
        self.assertNotEqual(naturalday_one, naturalday_two)
Exemplo n.º 9
0
    def test_different_timezones(self):
        """ When using two different timezones. """
        now = datetime.datetime.now()
        now_tz = timezone.make_aware(now, timezone.get_default_timezone())
        now_tz_i = timezone.localtime(now_tz, timezone.get_fixed_timezone(195))

        self.assertEqual(timesince(now), '0\xa0minutes')
        self.assertEqual(timesince(now_tz), '0\xa0minutes')
        self.assertEqual(timesince(now_tz_i), '0\xa0minutes')
        self.assertEqual(timesince(now_tz, now_tz_i), '0\xa0minutes')
        self.assertEqual(timeuntil(now), '0\xa0minutes')
        self.assertEqual(timeuntil(now_tz), '0\xa0minutes')
        self.assertEqual(timeuntil(now_tz_i), '0\xa0minutes')
        self.assertEqual(timeuntil(now_tz, now_tz_i), '0\xa0minutes')
Exemplo n.º 10
0
 def test_fixedoffset_negative_timedelta(self):
     delta = datetime.timedelta(hours=-2)
     self.assertEqual(
         timezone.get_fixed_timezone(delta).utcoffset(None), delta)
Exemplo n.º 11
0
import datetime
import pickle
from unittest import mock

import pytz

from djmodels.test import SimpleTestCase, ignore_warnings, override_settings
from djmodels.utils import timezone
from djmodels.utils.deprecation import RemovedInDjango31Warning

CET = pytz.timezone("Europe/Paris")
EAT = timezone.get_fixed_timezone(180)  # Africa/Nairobi
ICT = timezone.get_fixed_timezone(420)  # Asia/Bangkok


class TimezoneTests(SimpleTestCase):
    def test_now(self):
        with override_settings(USE_TZ=True):
            self.assertTrue(timezone.is_aware(timezone.now()))
        with override_settings(USE_TZ=False):
            self.assertTrue(timezone.is_naive(timezone.now()))

    def test_localdate(self):
        naive = datetime.datetime(2015, 1, 1, 0, 0, 1)
        with self.assertRaisesMessage(
                ValueError,
                'localtime() cannot be applied to a naive datetime'):
            timezone.localdate(naive)
        with self.assertRaisesMessage(
                ValueError,
                'localtime() cannot be applied to a naive datetime'):