make sure datetime_to_epoch() returns ints
[sfa.git] / sfa / util / sfatime.py
index c5c6a55..34f4dce 100644 (file)
@@ -5,13 +5,22 @@ import time
 
 from sfa.util.sfalogging import logger
 
+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.
 
 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 input
@@ -20,10 +29,19 @@ For safety this can also handle inputs that are either timestamps, or datetimes
         if t.utcoffset() is not None:
             t = t.utcoffset() + t.replace(tzinfo=None)
         return t
-    elif isinstance (input, (int,float)):
+    elif isinstance (input, (int,float,long)):
         return datetime.datetime.fromtimestamp(input)
     else:
         logger.error("Unexpected type in utcparse [%s]"%type(input))
 
-def epochparse(input):
-    return time.strftime("%Y-%d-%m-T%H:%M:%SZ", time.localtime(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()))
+
+
+