@@ -2069,20 +2069,39 @@ This section shows recipes for common adapters and converters.
2069
2069
2070
2070
def convert_date(val):
2071
2071
"""Convert ISO 8601 date to datetime.date object."""
2072
- return datetime.date.fromisoformat(val)
2072
+ return datetime.date.fromisoformat(val.decode() )
2073
2073
2074
2074
def convert_datetime(val):
2075
2075
"""Convert ISO 8601 datetime to datetime.datetime object."""
2076
- return datetime.datetime.fromisoformat(val)
2076
+ return datetime.datetime.fromisoformat(val.decode() )
2077
2077
2078
2078
def convert_timestamp(val):
2079
2079
"""Convert Unix epoch timestamp to datetime.datetime object."""
2080
- return datetime.datetime.fromtimestamp(val)
2080
+ return datetime.datetime.fromtimestamp(int( val) )
2081
2081
2082
2082
sqlite3.register_converter("date", convert_date)
2083
2083
sqlite3.register_converter("datetime", convert_datetime)
2084
2084
sqlite3.register_converter("timestamp", convert_timestamp)
2085
2085
2086
+ .. testcode ::
2087
+ :hide:
2088
+
2089
+ dt = datetime.datetime(2019, 5, 18, 15, 17, 8, 123456)
2090
+
2091
+ assert adapt_date_iso(dt.date()) == "2019-05-18"
2092
+ assert convert_date(b"2019-05-18") == dt.date()
2093
+
2094
+ assert adapt_datetime_iso(dt) == "2019-05-18T15:17:08.123456"
2095
+ assert convert_datetime(b"2019-05-18T15:17:08.123456") == dt
2096
+
2097
+ # Using current time as fromtimestamp() returns local date/time.
2098
+ # Droping microseconds as adapt_datetime_epoch truncates fractional second part.
2099
+ now = datetime.datetime.now().replace(microsecond=0)
2100
+ current_timestamp = int(now.timestamp())
2101
+
2102
+ assert adapt_datetime_epoch(now) == current_timestamp
2103
+ assert convert_timestamp(str(current_timestamp).encode()) == now
2104
+
2086
2105
2087
2106
.. _sqlite3-connection-shortcuts :
2088
2107
0 commit comments