我想通过Go将用户的签入和签出时间(小时,分钟和秒)存储在Postgres表(列类型当然是时间)上
query := `INSERT INTO oc_log (userid, userdate, checkin_time, checkin_location, checkout_time, checkout_location) VALUES ($1, $2, $3, $4, $5, $6)`
err := db.QueryRow(query, userid, time.Now().Format("01-02-2006"), time.Now().Clock(), checkinlocation, "", "").Scan(&tmpid)
短毛绒抱怨
单值上下文中的多值time.Now()。Clock()
该如何解决?
答案 0 :(得分:2)
只需使用time.Time
值,并让驾驶员担心如何对其进行编码和解码:
package main
import (
"database/sql"
"fmt"
"log"
"time"
_ "github.com/lib/pq"
)
func main() {
db, err := sql.Open("postgres", "")
if err != nil {
log.Fatal(err)
}
_, err = db.Exec("CREATE TABLE foo (t timetz)")
if err != nil {
log.Fatal(err)
}
now := time.Now()
_, err = db.Exec("INSERT INTO foo VALUES ($1)", now)
if err != nil {
log.Fatal(err)
}
var t time.Time
err = db.QueryRow("SELECT t FROM foo").Scan(&t)
if err != nil {
log.Fatal(err)
}
fmt.Println(now.Format(time.RFC3339)) // 2019-09-18T10:22:36+02:00
fmt.Println(t.Format(time.RFC3339)) // 0000-01-01T10:22:36+02:00
}
答案 1 :(得分:1)
根据docs,这是Clock
的签名
func (t Time) Clock() (hour, min, sec int)
时钟返回三个值。如果需要,您需要单独保存它们。
或者,您可以将时间的字符串形式保存到数据库中。
time.Now().String()
或者如果您想按照某种格式保存日期
time.Now().Format("2006-01-02 15:04:05") // use a date format
或者您可以简单地将time.Now()
直接保存到数据库中,然后在检索日期时对其进行格式化
答案 2 :(得分:0)
如果你想根据你想要的格式存储时间,那么你可以使用下面的代码片段
tt := time.Now().Format("02-01-2006 15:04:05")
t,_ := time.Parse("02-01-2006 15:04:05",tt)
你可以在postgres表中插入这个t