From 7f27380d41a1371f885344d3a45854e5eddcf2ec Mon Sep 17 00:00:00 2001 From: Rory Flynn Date: Thu, 18 Apr 2024 16:04:06 +0200 Subject: [PATCH] Convert timezone-aware datetimes automatically to UTC --- mvt/common/utils.py | 7 +++++-- tests/common/test_utils.py | 8 ++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/mvt/common/utils.py b/mvt/common/utils.py index 86cb971..46f0bb1 100644 --- a/mvt/common/utils.py +++ b/mvt/common/utils.py @@ -53,20 +53,23 @@ def convert_chrometime_to_datetime(timestamp: int) -> datetime.datetime: def convert_datetime_to_iso(date_time: datetime.datetime) -> str: """Converts datetime to ISO string. - :param datetime: datetime. + :param datetime: datetime, naive or timezone aware :type datetime: datetime.datetime :returns: ISO datetime string in YYYY-mm-dd HH:MM:SS.ms format. :rtype: str """ try: + if date_time.tzinfo: + # Timezone aware object - convert to UTC + date_time = date_time.astimezone(tz=datetime.UTC) return date_time.strftime("%Y-%m-%d %H:%M:%S.%f") except Exception: return "" def convert_unix_to_utc_datetime( - timestamp: Union[int, float, str] + timestamp: Union[int, float, str], ) -> datetime.datetime: """Converts a unix epoch timestamp to UTC datetime. diff --git a/tests/common/test_utils.py b/tests/common/test_utils.py index f2f8433..4d03c8f 100644 --- a/tests/common/test_utils.py +++ b/tests/common/test_utils.py @@ -42,6 +42,14 @@ class TestDateConversions: converted = convert_unix_to_utc_datetime(TEST_DATE_EPOCH) assert convert_datetime_to_iso(converted) == TEST_DATE_ISO + def test_convert_timezone_aware_to_iso(self): + assert ( + convert_datetime_to_iso( + datetime.strptime("2024-09-30 11:21:20+0200", "%Y-%m-%d %H:%M:%S%z") + ) + == "2024-09-30 09:21:20.000000" + ) + class TestHashes: def test_hash_from_file(self):