Skip to content

Commit f43baf5

Browse files
committed
feat: add possibility to specify default timezone for datetimes without tzinfo
1 parent be6760d commit f43baf5

File tree

2 files changed

+38
-1
lines changed

2 files changed

+38
-1
lines changed

influxdb_client/client/util/date_utils.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,15 @@
1010
class DateHelper:
1111
"""DateHelper to groups different implementations of date operations."""
1212

13+
def __init__(self, timezone: datetime.tzinfo = UTC) -> None:
14+
"""
15+
Initialize defaults.
16+
17+
:param timezone: Default timezone used for serialization "datetime" without "tzinfo".
18+
Default value is "UTC".
19+
"""
20+
self.timezone = timezone
21+
1322
def parse_date(self, date_string: str):
1423
"""
1524
Parse string into Date or Timestamp.
@@ -40,7 +49,7 @@ def to_utc(self, value: datetime):
4049
:return: datetime in UTC
4150
"""
4251
if not value.tzinfo:
43-
return UTC.localize(value)
52+
return self.to_utc(value.replace(tzinfo=self.timezone))
4453
else:
4554
return value.astimezone(UTC)
4655

tests/test_DateHelper.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# -*- coding: utf-8 -*-
2+
3+
import unittest
4+
from datetime import datetime, timezone
5+
6+
from pytz import UTC, timezone
7+
8+
from influxdb_client.client.util import date_utils
9+
from influxdb_client.client.util.date_utils import DateHelper, get_date_helper
10+
11+
12+
class DateHelperTest(unittest.TestCase):
13+
14+
def setUp(self) -> None:
15+
date_utils.date_helper = DateHelper()
16+
17+
def test_to_utc(self):
18+
date = get_date_helper().to_utc(datetime(2021, 4, 29, 20, 30, 10, 0))
19+
self.assertEqual(datetime(2021, 4, 29, 20, 30, 10, 0, UTC), date)
20+
21+
def test_to_utc_different_timezone(self):
22+
date_utils.date_helper = DateHelper(timezone=timezone('ETC/GMT+2'))
23+
date = get_date_helper().to_utc(datetime(2021, 4, 29, 20, 30, 10, 0))
24+
self.assertEqual(datetime(2021, 4, 29, 22, 30, 10, 0, UTC), date)
25+
26+
27+
if __name__ == '__main__':
28+
unittest.main()

0 commit comments

Comments
 (0)