-from types import StringTypes
-import dateutil.parser
-import datetime
-
-from sfa.util.sfalogging import logger
-
-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
-"""
-
- if isinstance (input, datetime.datetime):
- logger.warn ("argument to utcparse already a datetime - doing nothing")
- 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)):
- return datetime.datetime.fromtimestamp(input)
- else:
- logger.error("Unexpected type in utcparse [%s]"%type(input))
-
+#----------------------------------------------------------------------\r
+# Copyright (c) 2008 Board of Trustees, Princeton University\r
+#\r
+# Permission is hereby granted, free of charge, to any person obtaining\r
+# a copy of this software and/or hardware specification (the "Work") to\r
+# deal in the Work without restriction, including without limitation the\r
+# rights to use, copy, modify, merge, publish, distribute, sublicense,\r
+# and/or sell copies of the Work, and to permit persons to whom the Work\r
+# is furnished to do so, subject to the following conditions:\r
+#\r
+# The above copyright notice and this permission notice shall be\r
+# included in all copies or substantial portions of the Work.\r
+#\r
+# THE WORK IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
+# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\r
+# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\r
+# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
+# OUT OF OR IN CONNECTION WITH THE WORK OR THE USE OR OTHER DEALINGS\r
+# IN THE WORK.\r
+#----------------------------------------------------------------------\r
+from types import StringTypes\r
+import dateutil.parser\r
+import datetime\r
+import time\r
+\r
+from sfa.util.sfalogging import logger\r
+\r
+DATEFORMAT = "%Y-%m-%dT%H:%M:%SZ"\r
+\r
+def utcparse(input):\r
+ """ Translate a string into a time using dateutil.parser.parse but make sure it's in UTC time and strip\r
+the timezone, so that it's compatible with normal datetime.datetime objects.\r
+\r
+For safety this can also handle inputs that are either timestamps, or datetimes\r
+"""\r
+ # prepare the input for the checks below by\r
+ # casting strings ('1327098335') to ints\r
+ if isinstance(input, StringTypes):\r
+ try:\r
+ input = int(input)\r
+ except ValueError:\r
+ pass\r
+\r
+ if isinstance (input, datetime.datetime):\r
+ logger.warn ("argument to utcparse already a datetime - doing nothing")\r
+ return input\r
+ elif isinstance (input, StringTypes):\r
+ t = dateutil.parser.parse(input)\r
+ if t.utcoffset() is not None:\r
+ t = t.utcoffset() + t.replace(tzinfo=None)\r
+ return t\r
+ elif isinstance (input, (int,float,long)):\r
+ return datetime.datetime.fromtimestamp(input)\r
+ else:\r
+ logger.error("Unexpected type in utcparse [%s]"%type(input))\r
+\r
+def datetime_to_string(input):\r
+ return datetime.datetime.strftime(input, DATEFORMAT)\r
+\r
+def datetime_to_utc(input):\r
+ return time.gmtime(datetime_to_epoch(input))\r
+\r
+def datetime_to_epoch(input):\r
+ return int(time.mktime(input.timetuple()))\r