如何在Postgres表上存储Go的当前时间(时分秒)?

时间:2019-09-18 07:55:27

标签: postgresql go

我想通过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()

该如何解决?

3 个答案:

答案 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