diff options
| author | Eoghan Glynn <eglynn@redhat.com> | 2012-11-19 16:25:32 +0000 |
|---|---|---|
| committer | Eoghan Glynn <eglynn@redhat.com> | 2012-11-19 22:16:44 +0000 |
| commit | ce80aac98a905a07ea7ec093f37243a4c3bbb6e0 (patch) | |
| tree | 8f4bb61ec24666bf787c3081d2647aa50d377bca | |
| parent | 403509e0c4bebbcb7e383291695a24069c725fde (diff) | |
| download | oslo-ce80aac98a905a07ea7ec093f37243a4c3bbb6e0.tar.gz oslo-ce80aac98a905a07ea7ec093f37243a4c3bbb6e0.tar.xz oslo-ce80aac98a905a07ea7ec093f37243a4c3bbb6e0.zip | |
Convenience wrapper for datetime.timedelta.total_seconds()
Allows time deltas in seconds to be concisely calculated
for py26 and py27.
Change-Id: I8987af1f892fda0a72f5eb0d45f94c595792dc78
| -rw-r--r-- | openstack/common/timeutils.py | 13 | ||||
| -rw-r--r-- | tests/unit/test_timeutils.py | 7 |
2 files changed, 20 insertions, 0 deletions
diff --git a/openstack/common/timeutils.py b/openstack/common/timeutils.py index 8600439..4bf19a5 100644 --- a/openstack/common/timeutils.py +++ b/openstack/common/timeutils.py @@ -135,3 +135,16 @@ def unmarshall_time(tyme): minute=tyme['minute'], second=tyme['second'], microsecond=tyme['microsecond']) + + +def delta_seconds(before, after): + """ + Compute the difference in seconds between two date, time, or + datetime objects (as a float, to microsecond resolution). + """ + delta = after - before + try: + return delta.total_seconds() + except AttributeError: + return ((delta.days * 24 * 3600) + delta.seconds + + float(delta.microseconds) / (10 ** 6)) diff --git a/tests/unit/test_timeutils.py b/tests/unit/test_timeutils.py index 38ac3ed..8236032 100644 --- a/tests/unit/test_timeutils.py +++ b/tests/unit/test_timeutils.py @@ -122,6 +122,13 @@ class TimeUtilsTest(unittest.TestCase): backagain = timeutils.unmarshall_time(binary) self.assertEqual(now, backagain) + def test_delta_seconds(self): + before = timeutils.utcnow() + after = before + datetime.timedelta(days=7, seconds=59, + microseconds=123456) + self.assertAlmostEquals(604859.123456, + timeutils.delta_seconds(before, after)) + class TestIso8601Time(unittest.TestCase): |
