diff --git a/cmd/go_migrate/mssql-transform.go b/cmd/go_migrate/mssql-transform.go index 9f73468..d31195b 100644 --- a/cmd/go_migrate/mssql-transform.go +++ b/cmd/go_migrate/mssql-transform.go @@ -2,6 +2,7 @@ package main import ( "encoding/binary" + "time" ) func mssqlUuidToBigEndian(mssqlUuid []byte) []byte { @@ -50,3 +51,11 @@ func wkbToEwkbWithSrid(geometry []byte, srid int) []byte { return result } + +func ensureUTC(t time.Time) time.Time { + if t.Location() == time.UTC { + return t + } + + return time.Date(t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute(), t.Second(), t.Nanosecond(), time.UTC) +} diff --git a/cmd/go_migrate/process.go b/cmd/go_migrate/process.go index 5f49d47..8cdf80c 100644 --- a/cmd/go_migrate/process.go +++ b/cmd/go_migrate/process.go @@ -5,6 +5,7 @@ import ( "database/sql" "fmt" "sync" + "time" "github.com/jackc/pgx/v5/pgxpool" @@ -83,6 +84,10 @@ func transformRowsMssql(columns []ColumnType, in <-chan []UnknownRowValues, out if b, ok := value.([]byte); ok { rowValues[i] = wkbToEwkbWithSrid(b, 4326) } + } else if col.SystemType() == "datetime" || col.SystemType() == "datetime2" { + if t, ok := value.(time.Time); ok { + rowValues[i] = ensureUTC(t) + } } } }