【问题标题】:How to change Date format like "yyyy-mm-dd" on the struct without parsing on the table rows?如何在不解析表行的情况下更改结构上的“yyyy-mm-dd”等日期格式?
【发布时间】:2018-01-18 16:57:12
【问题描述】:

我想更改结构上的 yyyy-mm-dd 格式的 EntryDate 格式,

type Value struct {
    Id uint `json:”id”`
    EntryDate time.time `json:”entry_date”`
    ProductId int `json:"product_id"`
    Value float64 `json:”value”`
}

默认结果是这样的

{
  Id: 11,
  EntryDate: "2017-11-23T00:00:00Z",
  product_id: 1,
  Value: 932.3
},

如何在不解析代码的情况下更改结构上的“yyyy-mm-dd”等EntryDate格式?

【问题讨论】:

  • 什么“表格行”?你能发布实际的代码和问题吗?给出的 Go 代码和 JSON 均无效。
  • 这似乎是一个标准的“定义你自己的编组器”,如 stackoverflow.com/questions/46142980/…stackoverflow.com/questions/28596376/… 所示(我在两个之后停止搜索,我们有很多这样的问题)。
  • 我的意思是从表中获取结果并通过循环格式化 EntryDate,然后渲染为 json。是否可以在结构上更改 EntryDate 类型,如“yyyy-mm-dd”?
  • 所以你想格式化time.Time。它有一个Format 方法:golang.org/pkg/time/#Time.Format
  • 它通过解析代码而不是结构类型来工作。如何像 time.TIME 一样自定义其他格式?这种情况不可能吗?

标签: datetime go time struct


【解决方案1】:

如果我对您的理解正确,您可以这样做:

package main

import (
    "encoding/json"
    "fmt"
    "time"
)

type Value struct {
    Id        uint      `json:”id”`
    EntryDate time.Time `json:”entry_date”`
    ProductId int       `json:"product_id"`
    Value     float64   `json:”value”`
}

func main() {
    val := Value{}
    val.Id = 1
    val.EntryDate = time.Now().UTC()
    val.ProductId = 2
    val.Value = 1.223
    t := val.EntryDate.UTC().Format("2006-01-02")
    fmt.Println("formated time : ", t)
    b, err := json.Marshal(val)
    if err != nil {
        fmt.Println("failed to marshal object", err)
        return
    }
    fmt.Println("actual object", string(b))
}

输出

 formated time : 2009-11-10
actual object {"Id":1,"EntryDate":"2009-11-10T23:00:00Z","product_id":2,"Value":1.223}

签入围棋操场:https://play.golang.org/p/Fc35ealF5BI

【讨论】:

  • 谢谢,这是真的,但我想通过在“EntryDate time.CustomFormat”之类的结构上使用自定义类型预定义来进行格式化。你知道我该怎么做吗?请我需要参考。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多