@@ -2112,20 +2112,39 @@ This section shows recipes for common adapters and converters.
2112
2112
2113
2113
def convert_date(val):
2114
2114
"""Convert ISO 8601 date to datetime.date object."""
2115
- return datetime.date.fromisoformat(val)
2115
+ return datetime.date.fromisoformat(val.decode() )
2116
2116
2117
2117
def convert_datetime(val):
2118
2118
"""Convert ISO 8601 datetime to datetime.datetime object."""
2119
- return datetime.datetime.fromisoformat(val)
2119
+ return datetime.datetime.fromisoformat(val.decode() )
2120
2120
2121
2121
def convert_timestamp(val):
2122
2122
"""Convert Unix epoch timestamp to datetime.datetime object."""
2123
- return datetime.datetime.fromtimestamp(val)
2123
+ return datetime.datetime.fromtimestamp(int( val) )
2124
2124
2125
2125
sqlite3.register_converter("date", convert_date)
2126
2126
sqlite3.register_converter("datetime", convert_datetime)
2127
2127
sqlite3.register_converter("timestamp", convert_timestamp)
2128
2128
2129
+ .. testcode ::
2130
+ :hide:
2131
+
2132
+ dt = datetime.datetime(2019, 5, 18, 15, 17, 8, 123456)
2133
+
2134
+ assert adapt_date_iso(dt.date()) == "2019-05-18"
2135
+ assert convert_date(b"2019-05-18") == dt.date()
2136
+
2137
+ assert adapt_datetime_iso(dt) == "2019-05-18T15:17:08.123456"
2138
+ assert convert_datetime(b"2019-05-18T15:17:08.123456") == dt
2139
+
2140
+ # Using current time as fromtimestamp() returns local date/time.
2141
+ # Droping microseconds as adapt_datetime_epoch truncates fractional second part.
2142
+ now = datetime.datetime.now().replace(microsecond=0)
2143
+ current_timestamp = int(now.timestamp())
2144
+
2145
+ assert adapt_datetime_epoch(now) == current_timestamp
2146
+ assert convert_timestamp(str(current_timestamp).encode()) == now
2147
+
2129
2148
2130
2149
.. _sqlite3-connection-shortcuts :
2131
2150
0 commit comments