-# Copyright (c) 2001 Autonomous Zone Industries
-# Copyright (c) 2002-2007 Bryce "Zooko" Wilcox-O'Hearn
-# This file is licensed under the
-# GNU Lesser General Public License v2.1.
-# See the file COPYING or visit http://www.gnu.org/ for details.
-
# ISO-8601:
# http://www.cl.cam.ac.uk/~mgk25/iso-time.html
-import datetime, re, time
+import calendar, datetime, re, time
+
+def format_time(t):
+ return time.strftime("%Y-%m-%d %H:%M:%S", t)
+
+def iso_utc_date(now=None, t=time.time):
+ if now is None:
+ now = t()
+ return datetime.datetime.utcfromtimestamp(now).isoformat()[:10]
def iso_utc(now=None, sep='_', t=time.time):
if now is None:
now = t()
return datetime.datetime.utcfromtimestamp(now).isoformat(sep)
-def iso_utc_time_to_localseconds(isotime, _conversion_re=re.compile(r"(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})[T_ ](?P<hour>\d{2}):(?P<minute>\d{2}):(?P<second>\d{2})(?P<subsecond>\.\d+)?")):
+def iso_utc_time_to_seconds(isotime, _conversion_re=re.compile(r"(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})[T_ ](?P<hour>\d{2}):(?P<minute>\d{2}):(?P<second>\d{2})(?P<subsecond>\.\d+)?")):
"""
The inverse of iso_utc().
raise ValueError, (isotime, "not a complete ISO8601 timestamp")
year, month, day = int(m.group('year')), int(m.group('month')), int(m.group('day'))
hour, minute, second = int(m.group('hour')), int(m.group('minute')), int(m.group('second'))
- utcseconds = time.mktime( (year, month, day, hour, minute, second, 0, 1, 0) )
- localseconds = utcseconds - time.timezone
subsecstr = m.group('subsecond')
if subsecstr:
subsecfloat = float(subsecstr)
- localseconds += subsecfloat
- return localseconds
+ else:
+ subsecfloat = 0
+
+ return calendar.timegm( (year, month, day, hour, minute, second, 0, 1, 0) ) + subsecfloat
def parse_duration(s):
orig = s
def parse_date(s):
# return seconds-since-epoch for the UTC midnight that starts the given
# day
- return iso_utc_time_to_localseconds(s + "T00:00:00")
+ return int(iso_utc_time_to_seconds(s + "T00:00:00"))