make sure datetime_to_epoch() returns ints
[sfa.git] / sfa / util / sfatime.py
index 1c5b6fd..34f4dce 100644 (file)
@@ -1,16 +1,47 @@
+from types import StringTypes
 import dateutil.parser
 import datetime
+import time
 
 from sfa.util.sfalogging import logger
 
-def utcparse(string):
+DATEFORMAT = "%Y-%m-%dT%H:%M:%SZ"
+
+def utcparse(input):
     """ Translate a string into a time using dateutil.parser.parse but make sure it's in UTC time and strip
-    the timezone, so that it's compatible with normal datetime.datetime objects"""
-    
-    if isinstance (string, datetime.datetime):
+the timezone, so that it's compatible with normal datetime.datetime objects.
+
+For safety this can also handle inputs that are either timestamps, or datetimes
+"""
+    # perpare the input for the checks below by
+    # casting strings ('1327098335') to ints
+    if isinstance(input, StringTypes):
+        try:
+            input = int(input)
+        except ValueError:
+            pass
+          
+    if isinstance (input, datetime.datetime):
         logger.warn ("argument to utcparse already a datetime - doing nothing")
-        return string
-    t = dateutil.parser.parse(string)
-    if t.utcoffset() is not None:
-        t = t.utcoffset() + t.replace(tzinfo=None)
-    return t
+        return input
+    elif isinstance (input, StringTypes):
+        t = dateutil.parser.parse(input)
+        if t.utcoffset() is not None:
+            t = t.utcoffset() + t.replace(tzinfo=None)
+        return t
+    elif isinstance (input, (int,float,long)):
+        return datetime.datetime.fromtimestamp(input)
+    else:
+        logger.error("Unexpected type in utcparse [%s]"%type(input))
+
+def datetime_to_string(input):
+    return datetime.datetime.strftime(input, DATEFORMAT)
+
+def datetime_to_utc(input):
+    return time.gmtime(datetime_to_epoch(input))    
+
+def datetime_to_epoch(input):
+    return int(time.mktime(input.timetuple()))
+
+
+