@@ -2069,20 +2069,39 @@ This section shows recipes for common adapters and converters.
20692069
20702070 def convert_date(val):
20712071 """Convert ISO 8601 date to datetime.date object."""
2072- return datetime.date.fromisoformat(val)
2072+ return datetime.date.fromisoformat(val.decode() )
20732073
20742074 def convert_datetime(val):
20752075 """Convert ISO 8601 datetime to datetime.datetime object."""
2076- return datetime.datetime.fromisoformat(val)
2076+ return datetime.datetime.fromisoformat(val.decode() )
20772077
20782078 def convert_timestamp(val):
20792079 """Convert Unix epoch timestamp to datetime.datetime object."""
2080- return datetime.datetime.fromtimestamp(val)
2080+ return datetime.datetime.fromtimestamp(int( val) )
20812081
20822082 sqlite3.register_converter("date", convert_date)
20832083 sqlite3.register_converter("datetime", convert_datetime)
20842084 sqlite3.register_converter("timestamp", convert_timestamp)
20852085
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+
20862105
20872106.. _sqlite3-connection-shortcuts :
20882107
0 commit comments