当前位置: > > > > 从 django 获取可为空的日期时间并将其转换为 golang
从 django 获取可为空的日期时间并将其转换为 golang
来源:stackoverflow
2024-04-19 13:09:34
0浏览
收藏
各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题是《从 django 获取可为空的日期时间并将其转换为 golang》,很明显是关于Golang的文章哈哈哈,其中内容主要会涉及到等等,如果能帮到你,觉得很不错的话,欢迎各位多多点评和分享!
问题内容
这是我从 jsonified models.datetimefield 发送(以原始文本)模式的日期:
2019-05-07 16:49:47.351628+00:00
我如何在 golang 中接收它:
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"github.com/lib/pq"
)
type datalink struct {
created pq.nulltime `json:"created"`
}
type senddata struct {
name string `json:"name"`
}
func main() {
var reception = datalink{}
var senddata = senddata{}
senddata.name = "melon"
url := "http://127.0.0.1:8309/getlinks/"
fmt.println("url:>", url)
js, err := json.marshal(senddata)
req, err := http.newrequest("post", url, bytes.newbuffer(js))
req.header.set("x-custom-header", "myvalue")
req.header.set("content-type", "application/json")
client := &http.client{}
resp, err := client.do(req)
if err != nil {
panic(err)
}
defer resp.body.close()
//fmt.println("response status:", resp.status)
//fmt.println("response headers:", resp.header)
body, _ := ioutil.readall(resp.body)
//fmt.println("response body:", string(body))
err = json.unmarshal(body, &reception)
fmt.println(reception.created)
}
但是当我打印我的对象时,我有一个:
{0001-01-01 00:00:00 +0000 UTC false}
如何从 django 时间字段或通过字符串操作理想地转换我的日期时间以使其与 go 和 pq.nulltime 兼容?
其他一切都有效(bool、int、float、string),但日期无效……
解决方案
您需要有一个自定义时间类型才能 unmarshal 自定义时间格式:
type Datetime struct {
pq.NullTime
}
func (t *Datetime) UnmarshalJSON(input []byte) error {
strInput := strings.Trim(string(input), `"`)
newTime, err := time.Parse(time.RFC3339, strInput)
if err != nil {
return err
}
t.pqNullTime = newTime
return nil
}
默认情况下,json unmarshal 需要 rfc3339 格式的日期。
今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注米云公众号,一起学习编程~
