We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
2 parents 3735a42 + 5161f9e commit 213405cCopy full SHA for 213405c
tests/aio/test_types.py
@@ -1,7 +1,7 @@
1
import pytest
2
import ydb
3
4
-from datetime import date, datetime, timedelta
+from datetime import date, datetime, timedelta, timezone
5
from decimal import Decimal
6
from uuid import uuid4
7
@@ -51,8 +51,9 @@ async def test_types(driver, database, value, ydb_type):
51
52
test_td = timedelta(microseconds=-100)
53
test_now = datetime.utcnow()
54
-test_today = date.today()
+test_today = test_now.date()
55
test_dt_today = datetime.today()
56
+tz4h = timezone(timedelta(hours=4))
57
58
59
@pytest.mark.parametrize(
@@ -63,6 +64,7 @@ async def test_types(driver, database, value, ydb_type):
63
64
(test_today, "Date", test_today),
65
(365, "Date", date(1971, 1, 1)),
66
(3600 * 24 * 365, "Datetime", datetime(1971, 1, 1, 0, 0)),
67
+ (datetime(1970, 1, 1, 4, 0, tzinfo=tz4h), "Timestamp", datetime(1970, 1, 1, 0, 0)),
68
(test_td, "Interval", test_td),
69
(test_now, "Timestamp", test_now),
70
(
ydb/types.py
@@ -5,7 +5,7 @@
import enum
import json
from . import _utilities, _apis
8
9
import typing
10
import uuid
11
import struct
@@ -23,6 +23,7 @@
23
24
_SECONDS_IN_DAY = 60 * 60 * 24
25
_EPOCH = datetime(1970, 1, 1)
26
+_EPOCH_UTC = datetime(1970, 1, 1, tzinfo=timezone.utc)
27
28
29
def _from_date(x: ydb_value_pb2.Value, table_client_settings: table.TableClientSettings) -> typing.Union[date, int]:
@@ -90,7 +91,11 @@ def _from_timestamp(
90
91
92
def _to_timestamp(pb: ydb_value_pb2.Value, value: typing.Union[datetime, int]):
93
if isinstance(value, datetime):
- pb.uint64_value = _timedelta_to_microseconds(value - _EPOCH)
94
+ if value.tzinfo:
95
+ epoch = _EPOCH_UTC
96
+ else:
97
+ epoch = _EPOCH
98
+ pb.uint64_value = _timedelta_to_microseconds(value - epoch)
99
else:
100
pb.uint64_value = value
101
0 commit comments