コード例 #1
0
ファイル: test_jalali_date.py プロジェクト: siminbar/khayyam
    def test_strptime(self):
        """
        %Z not working at all
        """

        def check_format(jdate ,fmt):
            jdate_str = jdate.strftime(fmt)
            d2 = JalaliDate.strptime(jdate_str, fmt)
            self.assertEqual(jdate, d2)

        # Test Year
        self.assertEqual(JalaliDate.strptime('1361', '%Y'), JalaliDate(1361))
        self.assertEqual(JalaliDate.strptime('1361%C', '%Y%C'), JalaliDate(1361))
        self.assertEqual(JalaliDate.strptime('اریا1361گلگشت', 'اریا%Yگلگشت'), JalaliDate(1361))

        current_century = int(JalaliDate.today().year / 100) * 100
        self.assertEqual(JalaliDate.strptime('61', '%y'), JalaliDate(current_century + 61))
        self.assertEqual(JalaliDate.strptime('61%C', '%y%C'), JalaliDate(current_century + 61))
        self.assertEqual(JalaliDate.strptime('اریا61گلگشت', 'اریا%yگلگشت'), JalaliDate(current_century+61))

        # Test months
        for i in range(1, 13):
            self.assertEqual(JalaliDate.strptime(str(i), '%m'), JalaliDate(month=i))
            self.assertEqual(JalaliDate.strptime('1345 %s' % PERSIAN_MONTH_ABBRS[i], '%Y %b'),
                             JalaliDate(year=1345, month=i, day=1))
            self.assertEqual(JalaliDate.strptime('1345 %s' % PERSIAN_MONTH_NAMES[i], '%Y %B'),
                             JalaliDate(year=1345, month=i, day=1))
            self.assertEqual(JalaliDate.strptime('1345 %s' % PERSIAN_MONTH_ABBRS_ASCII[i], '%Y %g'),
                             JalaliDate(year=1345, month=i, day=1))
            self.assertEqual(JalaliDate.strptime('1345 %s' % PERSIAN_MONTH_NAMES_ASCII[i], '%Y %G'),
                             JalaliDate(year=1345, month=i, day=1))

        self.assertRaises(ValueError, JalaliDate.strptime, '13', '%m')
        self.assertRaises(ValueError, JalaliDate.strptime, '0', '%m')
        self.assertRaises(ValueError, JalaliDate.strptime, '1345 مت', '%Y %b')
        self.assertRaises(ValueError, JalaliDate.strptime, '1345 شتران', '%Y %B')
        self.assertRaises(ValueError, JalaliDate.strptime, '1345 مت', '%Y %g')
        self.assertRaises(ValueError, JalaliDate.strptime, '1345 شتران', '%Y %G')

        # Test Week and Weekdays
        for i in range(7):
            check_format(JalaliDate.min + timedelta(i), '%d %w %W %U')
            self.assertEqual(
                JalaliDate.strptime('1345 10 10 %s' % PERSIAN_WEEKDAY_ABBRS[i], '%Y %m %d %a'),
                JalaliDate(year=1345, month=10, day=10))
            self.assertEqual(
                JalaliDate.strptime('1345 10 10 %s' % PERSIAN_WEEKDAY_ABBRS_ASCII[i], '%Y %m %d %e'),
                JalaliDate(year=1345, month=10, day=10))
            self.assertEqual(
                JalaliDate.strptime('1345 10 10 %s' % PERSIAN_WEEKDAY_NAMES[i], '%Y %m %d %A'),
                JalaliDate(year=1345, month=10, day=10))
            self.assertEqual(
                JalaliDate.strptime('1345 10 10 %s' % PERSIAN_WEEKDAY_NAMES_ASCII[i], '%Y %m %d %E'),
                JalaliDate(year=1345, month=10, day=10))

        # Test days
        for i in range(1, 32):
            self.assertEqual(JalaliDate.strptime(str(i), '%d'), JalaliDate(day=i))
        self.assertRaises(ValueError, JalaliDate.strptime, '32', '%d')
        self.assertRaises(ValueError, JalaliDate.strptime, '0', '%d')

        # Test day of year
        for i in range(1, 366):
            self.assertEqual(JalaliDate.strptime(str(i), '%j'), JalaliDate.fromordinal(i))
        self.assertRaises(ValueError, JalaliDate.strptime, '366', '%j')
        self.assertRaises(ValueError, JalaliDate.strptime, '0', '%j')
        self.assertEqual(JalaliDate.strptime('1345 5', '%Y %j'),
                         JalaliDate(year=1345, month=1, day=5))

        self.assertEqual(JalaliDate.strptime('1302 123 3 4', '%Y %j %m %d'),
                         JalaliDate(year=1302, month=4, day=30))

        self.assertEqual(JalaliDate.strptime('1302 3 4', '%Y %m %d'),
                         JalaliDate(year=1302, month=3, day=4))

        self.assertEqual(JalaliDate.strptime(u'جمعه 01 اردیبهشت 0001', '%A %d %B %Y'),
                         JalaliDate(month=2, day=1))

        self.assertEqual(JalaliDate.strptime(u'جمعه 01 فروردین 0001', '%x'),
                         JalaliDate.min)

        self.assertEqual(JalaliDate.strptime(u'جمعه 31 فروردین 1375%', '%x%%'),
                         JalaliDate(1375, 1, 31))

        check_format(JalaliDate(1375, 1, 31), "%Y-%m-%d %%")
        check_format(JalaliDate(1375, 1, 31), "%Y-%m-%d %% %% %%")

        for i in xrange(1, 400):
            check_format(JalaliDate.fromordinal(i), "%Y-%m-%d %a%A%b%B%j%w%W%e%E%g%G%x %% %% %%")

        d = JalaliDate.today().replace(month=1, day=1)
        for i in xrange(1, algorithms.days_in_year(d.year)):
            check_format(d + timedelta(i), "%y-%m-%d")
コード例 #2
0
    def test_strftime_strptime(self):

        def check_format(jdate ,fmt):
            jdate_str = jdate.strftime(fmt)
            parsed_dt = JalaliDatetime.strptime(jdate_str, fmt)
            if jdate != parsed_dt:
                print(repr(jdate))
                print(jdate_str)
                print(repr(parsed_dt))
            self.assertEqual(jdate, parsed_dt)

        d1 = JalaliDatetime(self.leap_year, 12, 23, 12, 3, 45, 34567)

        self.assertEqual(d1.strftime('%Q'), 'Panjshanbeh 23 Esfand 1375 12:03:45 PM')

        # Test HOUR
        self.assertEqual(JalaliDatetime(1386, 12, 23).strftime('%H'), u'00')
        self.assertEqual(JalaliDatetime(1386, 12, 23, 1).strftime('%H'), u'01')
        self.assertEqual(JalaliDatetime(1386, 12, 23, 12).strftime('%H'), u'12')
        self.assertEqual(JalaliDatetime(1386, 12, 23, 13).strftime('%H'), u'13')
        self.assertEqual(JalaliDatetime(1386, 12, 23, 23).strftime('%H'), u'23')
        self.assertEqual(
            (JalaliDatetime(1386, 12, 23, 23, 59, 59) + timedelta(seconds=1)).strftime('%H'), u'00')

        self.assertEqual(JalaliDatetime(1386, 12, 23).strftime('%I'), u'12')
        self.assertEqual(JalaliDatetime(1386, 12, 23, 1).strftime('%I'), u'01')
        self.assertEqual(JalaliDatetime(1386, 12, 23, 12).strftime('%I'), u'12')
        self.assertEqual(JalaliDatetime(1386, 12, 23, 13).strftime('%I'), u'01')
        self.assertEqual(JalaliDatetime(1386, 12, 23, 23).strftime('%I'), u'11')
        self.assertEqual(
            (JalaliDatetime(1386, 12, 23, 23, 59, 59) + timedelta(seconds=1)).strftime('%I'), u'12')

        self.assertEqual(d1.strftime('%I'), u'12')
        self.assertEqual(JalaliDatetime.strptime('8', '%H'), JalaliDatetime(hour=8))

        # Test Timezone
        tz_dt = JalaliDatetime(tzinfo=Timezone(timedelta(minutes=10)))
        self.assertEqual(JalaliDatetime.strptime('00:10', '%z'), tz_dt)
        self.assertEqual(tz_dt.strftime('%z'), '+00:10')
        tz_dt = JalaliDatetime(tzinfo=Timezone(timedelta(minutes=-30)))
        self.assertEqual(tz_dt.strftime('%z'), '-00:30')
        self.assertEqual(JalaliDatetime.strptime('', '%z'), JalaliDatetime())
        self.assertEqual(JalaliDatetime.strptime('00:00', '%z'), JalaliDatetime())
        self.assertEqual(JalaliDatetime.strptime('00:01', '%z'),
                         JalaliDatetime(tzinfo=Timezone(timedelta(minutes=1))))
        self.assertNotEqual(JalaliDatetime.strptime('04:30', '%z'), JalaliDatetime.strptime('04:31', '%z'))
        self.assertEqual(JalaliDatetime.strptime('04:30', '%z'), JalaliDatetime.strptime('04:30', '%z'))
        self.assertNotEqual(JalaliDatetime.strptime('04:30', '%z'),
                         JalaliDatetime(tzinfo=teh_tz))
        self.assertEqual(JalaliDatetime.strptime('+04:30', '%z').utcoffset(), timedelta(hours=4.50))
        self.assertEqual(tz_dt.strftime('%z'), tz_dt.strftime('%Z'))

        self.assertEqual(
            JalaliDatetime(1394, 4, 28, 18, 14, 35, 962659, Timezone(timedelta(.3))).strftime('%Y-%m-%d %H:%M:%S.%f %z'),
            '1394-04-28 18:14:35.962659 +07:12')

        self.assertEqual(
            JalaliDatetime.strptime('1394-04-28 18:14:35.962659 +07:12', '%Y-%m-%d %H:%M:%S.%f %z'),
            JalaliDatetime(1394, 4, 28, 18, 14, 35, 962659, Timezone(timedelta(.3)))
            )

        check_format(d1, '%Y-%m-%d %H:%M:%S.%f')
        check_format(JalaliDatetime(1375, 12, 23, 12, 0, 0, 0), '%Y-%m-%d %p %I:%M:%S.%f')

        self.assertEqual(
            JalaliDatetime.strptime(u'1394-تیر-29 دوشنبه 00:05:14.113389 +04:30', '%Y-%B-%d %A %H:%M:%S.%f %z'),
            JalaliDatetime(1394, 4, 29, 0, 5, 14, 113389, Timezone(timedelta(hours=4, minutes=30)))
        )

        d2 = JalaliDatetime(self.leap_year, 12, 23)
        for i in xrange(100):
            d_test = d2 + timedelta(hours=i)
            check_format(d_test, '%Y%m%d%H%a%A%b%B%c%C%f%I%j%M%p%S%w%x%X%y%g%G%e%E%W%%')
            check_format(d_test, '%Y-%m-%d %p %I:%M:%S.%f')
            check_format(d_test, '%Y-%m-%d %X')
            check_format(d_test, '%x %H')
            check_format(d_test, '%c')
            check_format(d_test, '%C')
            check_format(d_test, '%q')
            check_format(d_test, '%Q')

        self.assertEqual(d1.isoformat(), '%s-12-23T12:03:45.034567' % self.leap_year)


        tz_datetime = d1.astimezone(teh_tz)
        self.assertEqual(tz_datetime.strftime('%Z'), 'Iran/Tehran')