默认的json使用的时间格式是 json.Time3339
,这个时间的格式为:2006-01-02T15:04:05Z07:00
而我们常用的格式:DateTime:2006-01-02 15:04:05
和 ISO8601:2006-01-02T15:04:05+0800
一、DataTime 解析
库:github.com/reatang/go-json-datetime
示例代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| package main
import(
"fmt"
"encoding/json"
jsondt "github.com/reatang/go-json-datetime"
)
type Data struct {
CreateTime jsondt.DateTime `json:"create_time"`
}
func main() {
j1 := `{"create_time": "2024-07-10 18:52:19"}`
var d Data
err := json.Unmarshal(j1, &d)
if err != nil {
panic(err)
}
fmt.Println(d.CreateTime.Format(time.DateTime))
}
|
二、ISO8601 解析
有效的 ISO8601时间格式为:
仅日期:
日期和时间(不含时区):
日期和时间(含时区):
- 2023-12-05T14:30:00Z (Z 表示 UTC 时间)
- 2023-12-05T14:30:00+08:00 (+08:00 表示东八区时间)
仅时间(不含日期):
- 14:30:00
- 14:30:00.123 (包含毫秒)
周日期:
- 2023-W50 (表示 2023 年的第 50 周)
- 2023-W50-2 (表示 2023 年第 50 周的第 2 天)
库:github.com/relvacode/iso8601
示例代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| package main
import (
"encoding/json"
"fmt"
"time"
"github.com/relvacode/iso8601"
)
type Data struct {
CreateTime iso8601.Time `json:"create_time"`
}
func main() {
j1 := `{"create_time":"2017-04-24T09:41:34+0800"}`
var data Data
err = json.Unmarshal([]byte(j1), &data)
if err != nil {
panic(err)
}
fmt.Println(data)
}
|