【发布时间】:2017-08-28 20:03:33
【问题描述】:
我有一个 postgresql 数据库,其中包含 date 和 repeat_until 列作为带有时区的时间戳。示例日期具有特定于时区的格式。后者是冬令时。
2017-08-28 09:00:00+02, 2017-12-31 23:00:00+01
使用字符串和时间。时间第一个给出相对于 GMT+0 的时间,后者是秒(不是 unix 时间戳)。
import (
_ "github.com/lib/pq"
"fmt"
"github.com/gorilla/mux"
"github.com/jmoiron/sqlx"
"log"
"net/http"
"time"
)
type Event struct {
Date string
RepeatUntil time.Time `db:"repeat_until"`
}
event := Event{}
rows, _ := db.Queryx("select * from events order by date")
for rows.Next() {
err := rows.StructScan(&event)
if err != nil {
log.Fatalln(err)
}
fmt.Printf("%#v", event)
}
Date:"2017-08-28T07:00:00Z"
RepeatUntil:time.Time{sec:63650354400, nsec:0, loc:(*time.Location)(nil)}
保留时区信息的推荐方法是什么? time.Time 似乎很明显,但我不确定它是如何达到 unixtime 3986 年的秒数的。
我正在使用sqlx。
【问题讨论】:
-
我看不出问题出在哪里。它确实保留了时区。 play.golang.org/p/Lj_uxCts1R 。哦等等...我明白了,你对
sqlx的解析方式感到不安。 -
您是否尝试过在结构中使用
string而不是time.Time,然后使用我的操场链接中的布局自己解析它? -
我实际上开始怀疑您是否有旧版本的
pq驱动程序并需要更新。根据我看过的代码和我看过的测试用例 (github.com/lib/pq/blob/e42267488fe361b9dc034be7a6bffef5b195bceb/…),正确处理 TimeZones 应该没有问题。我建议你运行go get -u github.com/lib/pq -
retain time zone information到底是什么意思?Date:"2017-08-28T07:00:00Z"等于2017-08-28 09:00:00+02和sec:63650354400是自 零时间(第一年 1 月 1 日,00:00:00.000000000 UTC)以来的秒数,等于2017-12-31 23:00:00+01跨度> -
@RayfenWindspear 感谢您的意见。 pq-driver 是几天前安装的,所以更新并没有改变解析。 Date 被解析为字符串,RepeatUntil 被解析为 time.Time。如果您使用“疑虑”这个词来讽刺,我希望您不要那样做,而不是回答。
标签: postgresql datetime go