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')
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