亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

編組 time.Time 到 unix 時間戳

編組 time.Time 到 unix 時間戳

Go
HUH函數 2023-04-10 10:39:01
我有這樣的結構type log struct {    [...]    Timestamp timestamp `json:"timestamp"`}我想將時間戳作為 unix 時間戳,而不是默認情況下執行的任何操作 ( 2018-09-21T19:31:03.291Z)我試過像這樣創建一個自定義類型:type timestamp struct {    time.Time}func (t timestamp) MarshalJSON() ([]byte, error) {    return []byte(strconv.FormatInt(time.Time(t.Time).Unix(), 10)), nil}func (t *timestamp) UnmarshalJSON(data []byte) error {    i, err := strconv.ParseInt(string(data[:]), 10, 64)    if err != nil {        return err    }    t = &timestamp{        time.Unix(i, 0),    }    return nil}can not unmarshal timestamp into *main.timestamp但是我在嘗試從數據庫中讀取時總是遇到錯誤。for iter.Scan(&message.Text, &message.Timestamp) {    userlogResult.Messages = append(userlogResult.Messages, message)}if err := iter.Close(); err != nil {    log.Error(err)}它不能在這里解組時間戳。https://github.com/gocql/gocql/blob/799fb0373110eaa4e2e71dd32a9b5903f80dca8f/helpers.go#L30問題是它不使用 Unmarshall 函數。編輯:我已經回答了我自己的問題。
查看完整描述

3 回答

?
大話西游666

TA貢獻1817條經驗 獲得超14個贊

在這里,當分配&timestamp{..}給 t 時,它正在更改指針,而不是它指向的值必須按如下方式更改


func (t *timestamp) UnmarshalJSON(data []byte) error {

? ? i, err := strconv.ParseInt(string(data[:]), 10, 64)

? ? if err != nil {

? ? ? ? return err

? ? }

? ? *t = timestamp{

? ? ? ? time.Unix(i, 0),

? ? }

? ? return nil

}

編輯

由于您在從數據庫讀取時未能解組,這不是因為?如果您使用的是 sql,則json.unmarshalling必須實施sql.Scanner


查看完整回答
反對 回復 2023-04-10
?
PIPIONE

TA貢獻1829條經驗 獲得超9個贊

我認為您的代碼還可以-除了解組中的代碼。您沒有在實際錯誤所在的編組/解組位置顯示代碼。

我讓它在操場上工作。

而不是這個(它改變了指針)

t = &timestamp{

? time.Unix(i, 0),

}

更改值


t.Time = time.Unix(i,0)

使用結構的主要功能


fmt.Println("First Log...")

l := log{Timestamp: timestamp{time.Now()}}

fmt.Println(l)


buf, err := json.Marshal(l)

if err != nil {

? ? panic(err)

}

fmt.Println("Marshalled to JSON...")

fmt.Printf("%s\n", buf)


var logCopy log

if err := json.Unmarshal(buf, &logCopy); err != nil {

? ? panic(err)

}

fmt.Println("UnMarshalled from JSON...")

fmt.Println(logCopy)


查看完整回答
反對 回復 2023-04-10
?
繁花不似錦

TA貢獻1851條經驗 獲得超4個贊

好吧,在混淆了這里的很多人(抱歉)和我自己之后,我找到了解決方案。


對 json 的編組現在只需要像這樣修復 gocql 兼容性:


var ts time.Time

for iter.Scan(&message.Text, &ts) {

    message.Timestamp = timestamp{ts}


    userlogResult.Messages = append(userlogResult.Messages, message)

}


查看完整回答
反對 回復 2023-04-10
  • 3 回答
  • 0 關注
  • 149 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號