关于#go#的问题,如何解决?(语言-golang)


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"}

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    可以使用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日"}
    }
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^