Ejemplo n.º 1
0
    def test_parse(self):
        date_str_without_tz = 'January 1st, 2014 10:00:00'
        result = date_utils.parse(value=date_str_without_tz)
        self.assertEqual(str(result), '2014-01-01 10:00:00+00:00')
        self.assertEqual(result.tzinfo.tzname(None), 'UTC')

        # preserve original tz
        date_str_with_tz = 'January 1st, 2014 10:00:00 +07:00'
        result = date_utils.parse(value=date_str_with_tz, preserve_original_tz=True)
        self.assertEqual(str(result), '2014-01-01 10:00:00+07:00')
        self.assertEqual(result.tzinfo.utcoffset(result), datetime.timedelta(hours=7))

        # convert to utc
        date_str_with_tz = 'January 1st, 2014 10:00:00 +07:00'
        result = date_utils.parse(value=date_str_with_tz, preserve_original_tz=False)
        self.assertEqual(str(result), '2014-01-01 03:00:00+00:00')
        self.assertEqual(result.tzinfo.utcoffset(result), datetime.timedelta(hours=0))
        self.assertEqual(result.tzinfo.tzname(None), 'UTC')
Ejemplo n.º 2
0
def _timediff(diff_target, period_seconds, operator):
    """
    :param diff_target: Date string.
    :type diff_target: ``str``

    :param period_seconds: Seconds.
    :type period_seconds: ``int``

    :rtype: ``bool``
    """
    # Pickup now in UTC to compare against
    utc_now = date_utils.get_datetime_utc_now()

    # assuming diff_target is UTC and specified in python iso format.
    # Note: date_utils.parse uses dateutil.parse which is way more flexible then strptime and
    # supports many date formats
    diff_target_utc = date_utils.parse(diff_target)
    return operator((utc_now - diff_target_utc).total_seconds(), period_seconds)
Ejemplo n.º 3
0
def _timediff(diff_target, period_seconds, operator):
    """
    :param diff_target: Date string.
    :type diff_target: ``str``

    :param period_seconds: Seconds.
    :type period_seconds: ``int``

    :rtype: ``bool``
    """
    # Pickup now in UTC to compare against
    utc_now = date_utils.get_datetime_utc_now()

    # assuming diff_target is UTC and specified in python iso format.
    # Note: date_utils.parse uses dateutil.parse which is way more flexible then strptime and
    # supports many date formats
    diff_target_utc = date_utils.parse(diff_target)
    return operator((utc_now - diff_target_utc).total_seconds(), period_seconds)
def parse(value, preserve_original_tz=False, validate_value=True):
    """
    Parse date in the ISO8601 format and return a time-zone aware datetime object.

    :param value: Date in ISO8601 format.
    :type value: ``str``

    :param preserve_original_tz: True to preserve the original timezone - by default result is
                                 converted into UTC.
    :type preserve_original_tz: ``boolean``

    :param validate_value: True to validate that the date is in the ISO8601 format.
    :type validate_value: ``boolean``

    :rtype: ``datetime.datetime``
    """
    if validate_value:
        validate(value, raise_exception=True)

    dt = date_utils.parse(value=value, preserve_original_tz=preserve_original_tz)
    return dt