Example #1
0
 def testLeap(self):
     self.assertRaises(DateTimeError, parse, '1999-2-29 1:2:3.456')
     self.assertRaises(DateTimeError, parse, '1900-2-29 1:2:3.456')
     self.assertEqual(parse('2000-02-29 1:2:3')[:6],
                      (2000, 2, 29, 1, 2, 3))
     self.assertEqual(parse('2004-02-29 1:2:3')[:6],
                      (2004, 2, 29, 1, 2, 3))
Example #2
0
    def _parseInput(self, input):
        """Convert a string to a datetime value.

          >>> from zope.publisher.browser import TestRequest
          >>> from zope.schema import Field
          >>> field = Field(__name__='foo', title=u'Foo')
          >>> widget = DateTimeWidget(field, TestRequest())
          >>> widget.required_time_zone = pytz.timezone('UTC')
          >>> widget.time_zone
          <UTC>

        The widget converts an empty string to the missing value:

          >>> widget._parseInput('') == field.missing_value
          True

        The widget prints out times in UTC:

          >>> print widget._parseInput('2006-01-01 12:00:00')
          2006-01-01 12:00:00+00:00

        But it will handle other time zones:

          >>> widget.required_time_zone = pytz.timezone('Australia/Perth')
          >>> print widget._parseInput('2006-01-01 12:00:00')
          2006-01-01 12:00:00+08:00

        Invalid dates result in a ConversionError:

          >>> print widget._parseInput('not a date')  #doctest: +ELLIPSIS
          Traceback (most recent call last):
            ...
          ConversionError: ('Invalid date value', ...)
        """
        if input == self._missing:
            return self.context.missing_value
        self._checkSupportedFormat(input)
        try:
            year, month, day, hour, minute, second, dummy_tz = parse(input)
            second, micro = divmod(second, 1.0)
            micro = round(micro * 1000000)
            dt = datetime(year, month, day,
                          hour, minute, int(second), int(micro))
        except (DateTimeError, ValueError, IndexError) as v:
            raise ConversionError('Invalid date value', v)
        return self.time_zone.localize(dt)
Example #3
0
    def _toFieldValue(self, input):
        """Convert a string to a datetime value.

          >>> from zope.publisher.browser import TestRequest
          >>> from zope.schema import Field
          >>> field = Field(__name__='foo', title=u'Foo')
          >>> widget = LocalDateTimeWidget(field, TestRequest())

        The widget converts an empty string to the missing value:

          >>> widget._toFieldValue('') == field.missing_value
          True

        By default, the date is interpreted as UTC:

          >>> print widget._toFieldValue('2006-01-01 12:00:00')
          2006-01-01 12:00:00+00:00

        But it will handle other time zones:

          >>> widget.timeZoneName = 'Australia/Perth'
          >>> print widget._toFieldValue('2006-01-01 12:00:00')
          2006-01-01 12:00:00+08:00

        Invalid dates result in a ConversionError:

          >>> print widget._toFieldValue('not a date')  #doctest: +ELLIPSIS
          Traceback (most recent call last):
            ...
          ConversionError: ('Invalid date value', ...)
        """
        if input == self._missing:
            return self.context.missing_value
        try:
            year, month, day, hour, minute, second, dummy_tz = parse(input)
            second, micro = divmod(second, 1.0)
            micro = round(micro * 1000000)
            dt = datetime.datetime(year, month, day, hour, minute, int(second), int(micro))
        except (DateTimeError, ValueError, IndexError) as v:
            raise ConversionError("Invalid date value", v)
        tz = pytz.timezone(self.timeZoneName)
        return tz.localize(dt)
Example #4
0
 def testParse(self):
     self.assertEqual(parse('1999 12 31')[:6],
                      (1999, 12, 31, 0, 0, 0))
     self.assertEqual(parse('1999 12 31 EST'),
                      (1999, 12, 31, 0, 0, 0, 'EST'))
     self.assertEqual(parse('Dec 31, 1999')[:6],
                      (1999, 12, 31, 0, 0, 0))
     self.assertEqual(parse('Dec 31 1999')[:6],
                      (1999, 12, 31, 0, 0, 0))
     self.assertEqual(parse('Dec 31 1999')[:6],
                      (1999, 12, 31, 0, 0, 0))
     self.assertEqual(parse('1999/12/31 1:2:3')[:6],
                      (1999, 12, 31, 1, 2, 3))
     self.assertEqual(parse('1999-12-31 1:2:3')[:6],
                      (1999, 12, 31, 1, 2, 3))
     self.assertEqual(parse('1999-12-31T01:02:03')[:6],
                      (1999, 12, 31, 1, 2, 3))
     self.assertEqual(parse('1999-31-12 1:2:3')[:6],
                      (1999, 12, 31, 1, 2, 3))
     self.assertEqual(parse('1999-31-12 1:2:3.456')[:5],
                      (1999, 12, 31, 1, 2))
     self.assertEqual(int(parse('1999-31-12 1:2:3.456')[5]*1000+.000001),
                      3456)
     self.assertEqual(parse('1999-12-31T01:02:03.456')[:5],
                      (1999, 12, 31, 1, 2))
     self.assertEqual(int(parse('1999-12-31T01:02:03.456')[5]*1000+.000001),
                      3456)
     self.assertEqual(parse('Tue, 24 Jul 2001 09:41:03 -0400'),
                      (2001, 7, 24, 9, 41, 3, '-0400'))
     self.assertEqual(parse('1999-12-31T01:02:03.456-12')[6], '-1200')
     self.assertEqual(parse('1999-12-31T01:02:03.456+0030')[6], '+0030')
     self.assertEqual(parse('1999-12-31T01:02:03.456-00:30')[6], '-0030')
Example #5
0
 def _callFUT(self, text):
     from zope.datetime import parse
     return parse(text)
 def testLeap(self):
     self.assertRaises(DateTimeError, parse, '1999-2-29 1:2:3.456')
     self.assertRaises(DateTimeError, parse, '1900-2-29 1:2:3.456')
     self.assertEqual(parse('2000-02-29 1:2:3')[:6], (2000, 2, 29, 1, 2, 3))
     self.assertEqual(parse('2004-02-29 1:2:3')[:6], (2004, 2, 29, 1, 2, 3))
 def testParse(self):
     self.assertEqual(parse('1999 12 31')[:6], (1999, 12, 31, 0, 0, 0))
     self.assertEqual(parse('1999 12 31 EST'),
                      (1999, 12, 31, 0, 0, 0, 'EST'))
     self.assertEqual(parse('Dec 31, 1999')[:6], (1999, 12, 31, 0, 0, 0))
     self.assertEqual(parse('Dec 31 1999')[:6], (1999, 12, 31, 0, 0, 0))
     self.assertEqual(parse('Dec 31 1999')[:6], (1999, 12, 31, 0, 0, 0))
     self.assertEqual(
         parse('1999/12/31 1:2:3')[:6], (1999, 12, 31, 1, 2, 3))
     self.assertEqual(
         parse('1999-12-31 1:2:3')[:6], (1999, 12, 31, 1, 2, 3))
     self.assertEqual(
         parse('1999-12-31T01:02:03')[:6], (1999, 12, 31, 1, 2, 3))
     self.assertEqual(
         parse('1999-31-12 1:2:3')[:6], (1999, 12, 31, 1, 2, 3))
     self.assertEqual(
         parse('1999-31-12 1:2:3.456')[:5], (1999, 12, 31, 1, 2))
     self.assertEqual(
         int(parse('1999-31-12 1:2:3.456')[5] * 1000 + .000001), 3456)
     self.assertEqual(
         parse('1999-12-31T01:02:03.456')[:5], (1999, 12, 31, 1, 2))
     self.assertEqual(
         int(parse('1999-12-31T01:02:03.456')[5] * 1000 + .000001), 3456)
     self.assertEqual(parse('Tue, 24 Jul 2001 09:41:03 -0400'),
                      (2001, 7, 24, 9, 41, 3, '-0400'))
     self.assertEqual(parse('1999-12-31T01:02:03.456-12')[6], '-1200')
     self.assertEqual(parse('1999-12-31T01:02:03.456+0030')[6], '+0030')
     self.assertEqual(parse('1999-12-31T01:02:03.456-00:30')[6], '-0030')
 def _callFUT(self, text):
     from zope.datetime import parse
     return parse(text)
Example #9
0
 def parse(self, value):
     try:
         return datetime(*parse(value, local=False)[:6], tzinfo=UTC)
     except (TypeError, SyntaxError):
         raise ValueError()
Example #10
0
 def parse(self, value):
     try:
         return datetime(*parse(value, local=False)[:6], tzinfo=UTC)
     except (TypeError, SyntaxError):
         raise ValueError()