diff options
Diffstat (limited to 'openstack')
| -rw-r--r-- | openstack/common/timeutils.py | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/openstack/common/timeutils.py b/openstack/common/timeutils.py index 345f315..a7b2ce3 100644 --- a/openstack/common/timeutils.py +++ b/openstack/common/timeutils.py @@ -20,11 +20,13 @@ Time related utilities and helper functions. """ import datetime +import time import iso8601 TIME_FORMAT = "%Y-%m-%dT%H:%M:%S" +PERFECT_TIME_FORMAT = "%Y-%m-%dT%H:%M:%S.%f" def isotime(at=None): @@ -47,12 +49,34 @@ def parse_isotime(timestr): raise ValueError(e.message) +def strtime(at=None, fmt=PERFECT_TIME_FORMAT): + """Returns formatted utcnow.""" + if not at: + at = utcnow() + return at.strftime(fmt) + + +def parse_strtime(timestr, fmt=PERFECT_TIME_FORMAT): + """Turn a formatted time back into a datetime.""" + return datetime.datetime.strptime(timestr, fmt) + + def normalize_time(timestamp): """Normalize time in arbitrary timezone to UTC""" offset = timestamp.utcoffset() return timestamp.replace(tzinfo=None) - offset if offset else timestamp +def is_older_than(before, seconds): + """Return True if before is older than seconds.""" + return utcnow() - before > datetime.timedelta(seconds=seconds) + + +def utcnow_ts(): + """Timestamp version of our utcnow function.""" + return time.mktime(utcnow().timetuple()) + + def utcnow(): """Overridable version of utils.utcnow.""" if utcnow.override_time: @@ -68,6 +92,17 @@ def set_time_override(override_time=datetime.datetime.utcnow()): utcnow.override_time = override_time +def advance_time_delta(timedelta): + """Advance overriden time using a datetime.timedelta.""" + assert(not utcnow.override_time is None) + utcnow.override_time += timedelta + + +def advance_time_seconds(seconds): + """Advance overriden time by seconds.""" + advance_time_delta(datetime.timedelta(0, seconds)) + + def clear_time_override(): """Remove the overridden time.""" utcnow.override_time = None |
