no change - various tweaks here and there
[sfa.git] / sfa / util / sfatime.py
index 27418b2..75a2e4a 100644 (file)
 # IN THE WORK.
 #----------------------------------------------------------------------
 from types import StringTypes
-import dateutil.parser
-import datetime
 import time
+import datetime
+import dateutil.parser
+import calendar
 import re
 
 from sfa.util.sfalogging import logger
@@ -77,14 +78,16 @@ For safety this can also handle inputs that are either timestamps, or datetimes
     else:
         logger.error("Unexpected type in utcparse [%s]"%type(input))
 
-def datetime_to_string(input):
-    return datetime.datetime.strftime(input, SFATIME_FORMAT)
+def datetime_to_string(dt):
+    return datetime.datetime.strftime(dt, SFATIME_FORMAT)
 
-def datetime_to_utc(input):
-    return time.gmtime(datetime_to_epoch(input))
+def datetime_to_utc(dt):
+    return time.gmtime(datetime_to_epoch(dt))
 
-def datetime_to_epoch(input):
-    return int(time.mktime(input.timetuple()))
+# see https://docs.python.org/2/library/time.html 
+# all timestamps are in UTC so time.mktime() would be *wrong*
+def datetime_to_epoch(dt):
+    return int(calendar.timegm(dt.timetuple()))
 
 def add_datetime(input, days=0, hours=0, minutes=0, seconds=0):
     """
@@ -94,6 +97,10 @@ def add_datetime(input, days=0, hours=0, minutes=0, seconds=0):
     return dt + datetime.timedelta(days=days, hours=hours, minutes=minutes, seconds=seconds)
 
 if __name__ == '__main__':
+        # checking consistency
+    print 20*'X'
+    print ("Should be close to zero: %s"%(datetime_to_epoch(datetime.datetime.utcnow())-time.time()))
+    print 20*'X'
     for input in [
             '+2d',
             '+3w',