From bdda08df8c4ed1da3c6096e7a0b3b2aee9ed6386 Mon Sep 17 00:00:00 2001
From: Zooko O'Whielacronx <zooko@zooko.com>
Date: Tue, 14 Aug 2007 09:33:49 -0700
Subject: [PATCH] copy pyutil.time_format into src/allmydata/util time_format()
 provides a good format for logging timestamps

---
 src/allmydata/util/time_format.py | 36 +++++++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)
 create mode 100644 src/allmydata/util/time_format.py

diff --git a/src/allmydata/util/time_format.py b/src/allmydata/util/time_format.py
new file mode 100644
index 00000000..63b5770d
--- /dev/null
+++ b/src/allmydata/util/time_format.py
@@ -0,0 +1,36 @@
+#  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
+
+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+)?")):
+    """
+    The inverse of iso_utc().
+
+    Real ISO-8601 is "2003-01-08T06:30:59".  We also accept the widely
+    used variants "2003-01-08_06:30:59" and "2003-01-08 06:30:59".
+    """
+    m = _conversion_re.match(isotime)
+    if not m:
+        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
+
-- 
2.45.2