package main
import (
"encoding/json"
"fmt"
)
type User struct {
ID int `json:"id"`
Username string `json:"username"`
CreatedTime int `json:"created_time"`
}
func main() {
//比如这个CreatedTime是mysql存储的int类型
user := User{
ID: 1,
Username: "john_doe",
CreatedTime: 1686748460,
}
fmt.Println(user)
}
比如这个CreatedTime是mysql存储的int类型,这个时候要返回给前端json可能是"2020年10月11日"这种格式,这个明显就是字符串了,
无法循环修改CreatedTime的值,这个时候怎么处理呢
package main
import (
"encoding/json"
"fmt"
"time"
)
type User struct {
ID int `json:"id"`
Username string `json:"username"`
CreatedTime string `json:"created_time"`
}
func main() {
user := User{
ID: 1,
Username: "john_doe",
CreatedTime: "2023-03-01T10:07:40Z",
}
// 将时间字符串解析为 time.Time 类型
createdTime, err := time.Parse(time.RFC3339, user.CreatedTime)
if err != nil {
fmt.Println("Error:", err)
return
}
// 将时间格式化为 "YYYY-MM-DD HH:nn:ss" 格式
formattedTime := createdTime.Format("2006-01-02 15:04:05")
// 更新 User 结构体中的 CreatedTime 字段
user.CreatedTime = formattedTime
// 将 User 结构体转换为 JSON 字符串
jsonBytes, err := json.Marshal(user)
if err != nil {
fmt.Println("Error:", err)
return
}
jsonString := string(jsonBytes)
fmt.Println(jsonString)
}
输出
不知道你这个问题是否已经解决, 如果还没有解决的话:{"id":1,"username":"john_doe","created_time":"2023-03-01 10:07:40"}
可以使用time包中的函数将int类型的时间字段转换成Time类型,并通过Format函数将其格式化为所需的字符串格式,最后将字符串类型的时间字段作为结构体字段返回给前端的json。
示例代码如下:
package main
import (
"encoding/json"
"fmt"
"time"
)
type MyStruct struct {
CreatedTime int64 `json:"created_time"`
FormattedTime string `json:"formatted_time"`
}
func main() {
//假设从数据库中读取到的时间戳是1602386400
createdTime := int64(1602386400)
formattedTime := time.Unix(createdTime, 0).Format("2006年01月02日")
myStruct := MyStruct{CreatedTime: createdTime, FormattedTime: formattedTime}
jsonBytes, err := json.Marshal(myStruct)
if err != nil {
panic(err)
}
fmt.Println(string(jsonBytes))
//输出结果为:{"created_time":1602386400,"formatted_time":"2020年10月11日"}
}