diff options
| author | Zhongyue Luo <lzyeval@gmail.com> | 2012-06-06 17:51:07 +0800 |
|---|---|---|
| committer | Zhongyue Luo <lzyeval@gmail.com> | 2012-06-06 21:33:01 +0800 |
| commit | e67d7775a7a3347c795a5ff3ed8166f850b8598e (patch) | |
| tree | 40200e63126477e7e2e46488dc596d8205db3565 /openstack/common | |
| parent | c1f45745e240f9cc0d4e6522a71a895471aa94b3 (diff) | |
| download | oslo-e67d7775a7a3347c795a5ff3ed8166f850b8598e.tar.gz oslo-e67d7775a7a3347c795a5ff3ed8166f850b8598e.tar.xz oslo-e67d7775a7a3347c795a5ff3ed8166f850b8598e.zip | |
Add nova time util functions to timeutils
Fixes bug #1009410
1. Add the following functions from nova/utils.py
- strtime
- parse_strtime
- is_older_than
- utcnow_ts
- advance_time_delta
- advance_time_seconds
2. Write unittests in tests/unit/test_timeutils.py
Change-Id: Ie0bba90833e2ed31bb5ab867a7c1a76a9901cacb
Diffstat (limited to 'openstack/common')
| -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 |
