第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Golang 中完全解析時間戳

在 Golang 中完全解析時間戳

Go
守候你守候我 2022-01-17 18:05:21
我正在嘗試制作一個簡單的工具來解析文件中 JSON 格式的行并對INSERT數(shù)據(jù)庫執(zhí)行操作。我有一個看起來像這樣的結(jié)構:type DataBlob struct {  ....  Datetime time.Time `json:"datetime, string"`  ....}并解析如下所示的代碼:scanner := bufio.NewScanner(file)// Loop through all lines in the filefor scanner.Scan() {    var t DataBlob    // Decode the line, parse the JSON    dec := json.NewDecoder(strings.NewReader(scanner.Text()))    if err := dec.Decode(&t);    err != nil {        panic(err)    }    // Perform the database operation    executionString: = "INSERT INTO observations (datetime) VALUES ($1)"    _, err := db.Exec(executionString, t.Datetime)    if err != nil {        panic(err)    }}我的 JSON 文件有幾行,每行都包含一個datetime如下所示的值:{ "datetime": 1465793854 }當datetime格式化為 Unix 時間戳時,Marshaller 會抱怨:panic: parsing time "1465793854" as ""2006-01-02T15:04:05Z07:00"": cannot parse "1465793854" as """在生成 JSON 的腳本(也是用 Golang 編寫的)中,我嘗試簡單地打印該Time.time類型的 String 表示,生成以下內(nèi)容:{ "datetime": "2016-06-13 00:23:34 -0400 EDT" }當我去解析它時,Marshaller 抱怨它:panic: parsing time ""2016-06-13 00:23:34 -0400 EDT"" as ""2006-01-02T15:04:05Z07:00"": cannot parse " 00:23:34 -0400 EDT"" as "T"如果我還將這個時間戳(看起來很標準)視為一個字符串并避免編組問題,當我嘗試執(zhí)行插入時 Postgres 會抱怨:panic: pq: invalid input syntax for type timestamp: "2016-06-13 00:23:34 -0400 EDT"這在許多層面上令人沮喪,但主要是因為如果我序列化一個Time.time類型,我認為它仍然應該在過程的另一端被理解。我該如何解析這個時間戳來執(zhí)行數(shù)據(jù)庫插入?為冗長的問題道歉,并感謝您的幫助!
查看完整描述

2 回答

?
GCT1015

TA貢獻1827條經(jīng)驗 獲得超4個贊

JSON 解組time.Time 期望日期字符串為 RFC 3339 格式。


因此,在生成 JSON 的 golang 程序中,不要簡單地打印time.Time值,而是使用Format以 RFC 3339 格式打印它。


t.Format(time.RFC3339)

如果我序列化 Time.time 類型,我認為它仍然應該在流程的另一端被理解


如果您使用Marshaller 接口進行序列化,它確實會以 RFC 3339 格式輸出日期。所以過程的另一方會理解它。所以你也可以這樣做。


d := DataBlob{Datetime: t}

enc := json.NewEncoder(fileWriter)

enc.Encode(d)


查看完整回答
反對 回復 2022-01-17
?
catspeake

TA貢獻1111條經(jīng)驗 獲得超0個贊

作為參考,如果您需要使用時間類型進行自定義解組,則需要使用 UnmarshallJSON 方法創(chuàng)建自己的類型。帶有時間戳的示例


type Timestamp struct {

    time.Time

}


// UnmarshalJSON decodes an int64 timestamp into a time.Time object

func (p *Timestamp) UnmarshalJSON(bytes []byte) error {

    // 1. Decode the bytes into an int64

    var raw int64

    err := json.Unmarshal(bytes, &raw)


    if err != nil {

        fmt.Printf("error decoding timestamp: %s\n", err)

        return err

    }


    // 2 - Parse the unix timestamp

    *&p.Time = time.Unix(raw, 0)

    return nil

}

然后在你的結(jié)構中使用類型:


type DataBlob struct {

  ....

  Datetime Timestamp `json:"datetime"`

  ....

}


查看完整回答
反對 回復 2022-01-17
  • 2 回答
  • 0 關注
  • 238 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號