Fix timestamp reading issue (#68)

This commit is contained in:
Ryan Westlund 2021-02-28 12:18:08 -05:00 committed by GitHub
parent 367c11031d
commit 985bfa2d7c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 76 additions and 5 deletions

View file

@ -2,7 +2,8 @@ require "db"
require "./sqlite3/**"
module SQLite3
DATE_FORMAT = "%F %H:%M:%S.%L"
DATE_FORMAT_SUBSECOND = "%F %H:%M:%S.%L"
DATE_FORMAT_SECOND = "%F %H:%M:%S"
# :nodoc:
TIME_ZONE = Time::Location::UTC

View file

@ -64,11 +64,22 @@ class SQLite3::ResultSet < DB::ResultSet
end
def read(t : Time.class) : Time
Time.parse read(String), SQLite3::DATE_FORMAT, location: SQLite3::TIME_ZONE
text = read(String)
if text.includes? "."
Time.parse text, SQLite3::DATE_FORMAT_SUBSECOND, location: SQLite3::TIME_ZONE
else
Time.parse text, SQLite3::DATE_FORMAT_SECOND, location: SQLite3::TIME_ZONE
end
end
def read(t : Time?.class) : Time?
read(String?).try { |v| Time.parse(v, SQLite3::DATE_FORMAT, location: SQLite3::TIME_ZONE) }
read(String?).try { |v|
if v.includes? "."
Time.parse v, SQLite3::DATE_FORMAT_SUBSECOND, location: SQLite3::TIME_ZONE
else
Time.parse v, SQLite3::DATE_FORMAT_SECOND, location: SQLite3::TIME_ZONE
end
}
end
def read(t : Bool.class) : Bool

View file

@ -70,7 +70,7 @@ class SQLite3::Statement < DB::Statement
end
private def bind_arg(index, value : Time)
bind_arg(index, value.in(SQLite3::TIME_ZONE).to_s(SQLite3::DATE_FORMAT))
bind_arg(index, value.in(SQLite3::TIME_ZONE).to_s(SQLite3::DATE_FORMAT_SUBSECOND))
end
private def bind_arg(index, value)