def parse_date(date_string, format_, as_utc=True): """ Return a datetime corresponding to date_string, parsed according to format. For example, to re-display a date string in another format:: {{ "01/01/1970"|parse_date:"%m/%d/%Y"|date:"F jS, Y" }} """ try: parsed_dt = datetime.datetime.strptime(date_string, format_) return DateUtils.as_utc(parsed_dt) if as_utc else parsed_dt except ValueError: pass
def test_as_utc(self): # convert from naive to UTC naive = datetime.datetime(2002, 10, 27, 1, 30) in_utc = DateUtils.as_utc(naive) self.assertEqual(in_utc.strftime(self.fmt), '2002-10-27 01:30:00 UTC+0000') # convert from UTC to UTC (nothing changed) in_utc = datetime.datetime(2002, 10, 27, 1, 30, tzinfo=pytz.UTC) self.assertEqual(in_utc.strftime(self.fmt), '2002-10-27 01:30:00 UTC+0000') in_utc = DateUtils.as_utc(in_utc) self.assertEqual(in_utc.strftime(self.fmt), '2002-10-27 01:30:00 UTC+0000') # hard-replace from localized to UTC (simply ignore original tz) in_eastern = self.eastern.localize( datetime.datetime(2002, 10, 27, 1, 30)) self.assertEqual(in_eastern.strftime(self.fmt), '2002-10-27 01:30:00 EST-0500') in_utc = DateUtils.as_utc(in_eastern) self.assertEqual(in_utc.strftime(self.fmt), '2002-10-27 01:30:00 UTC+0000')