aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Bishop <ianbishop@pace7.com>2015-01-02 16:31:46 +1000
committerIan Bishop <ianbishop@pace7.com>2015-01-02 16:42:25 +1000
commit0b05acc293a940d3bfedf2df5fba12c49ac9ec35 (patch)
tree6a88e73baf2b64650b48cb2c6e84e0b1c4fcd86f
parentRevert d369cbb7d42232f785f51b3ef4c8b994dae83486 (diff)
downloadgolite-0b05acc293a940d3bfedf2df5fba12c49ac9ec35.tar.gz
golite-0b05acc293a940d3bfedf2df5fba12c49ac9ec35.tar.xz
Handle 13 digit datetime values
-rw-r--r--sqlite3.go14
-rw-r--r--sqlite3_test.go1
2 files changed, 14 insertions, 1 deletions
diff --git a/sqlite3.go b/sqlite3.go
index bc532cd..04f0edb 100644
--- a/sqlite3.go
+++ b/sqlite3.go
@@ -64,6 +64,7 @@ import (
"fmt"
"io"
"runtime"
+ "strconv"
"strings"
"time"
"unsafe"
@@ -504,7 +505,18 @@ func (rc *SQLiteRows) Next(dest []driver.Value) error {
val := int64(C.sqlite3_column_int64(rc.s.s, C.int(i)))
switch rc.decltype[i] {
case "timestamp", "datetime", "date":
- dest[i] = time.Unix(val, 0).Local()
+ unixTimestamp := strconv.FormatInt(val, 10)
+ if len(unixTimestamp) == 13 {
+ duration, err := time.ParseDuration(unixTimestamp + "ms")
+ if err != nil {
+ return fmt.Errorf("error parsing %s value %d, %s", rc.decltype[i], val, err)
+ }
+ epoch := time.Date(1970, 1, 1, 0, 0, 0, 0, time.UTC)
+ dest[i] = epoch.Add(duration)
+ } else {
+ dest[i] = time.Unix(val, 0).Local()
+ }
+
case "boolean":
dest[i] = val > 0
default:
diff --git a/sqlite3_test.go b/sqlite3_test.go
index 9cc5a0e..3e50258 100644
--- a/sqlite3_test.go
+++ b/sqlite3_test.go
@@ -309,6 +309,7 @@ func TestTimestamp(t *testing.T) {
{"0000-00-00 00:00:00", time.Time{}},
{timestamp1, timestamp1},
{timestamp1.Unix(), timestamp1},
+ {timestamp1.UnixNano() / int64(time.Millisecond), timestamp1},
{timestamp1.In(time.FixedZone("TEST", -7*3600)), timestamp1},
{timestamp1.Format("2006-01-02 15:04:05.000"), timestamp1},
{timestamp1.Format("2006-01-02T15:04:05.000"), timestamp1},