Golang日期时间结构

时间:2016-08-04 19:02:30

标签: json go bson

我正在尝试构建golang日期时间结构,并且我遇到了一些问题。请帮我构建模型。

再次感谢

 "effectiveDates" : {
    "startDate" : {
        "_class" : "com.sun.org.apache.xerces.internal.jaxp.datatype.XMLGregorianCalendarImpl", 
        "year" : NumberInt(2008), 
        "month" : NumberInt(10), 
        "day" : NumberInt(16), 
        "timezone" : NumberInt(-300), 
        "hour" : NumberInt(9), 
        "minute" : NumberInt(50), 
        "second" : NumberInt(13)
    }
}

1 个答案:

答案 0 :(得分:5)

这应该足以让你前进。有几个怪癖:

  • NumberInt(n)值无效JSON,因此我假设他们从GET调用作为数字进入
  • 时区NumberInt需要转换为字符串,并按照表格-0700进行按摩。我已将此作为练习留给你

这是我的解决方案:

package main

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

type StartDate struct {
    Class    string `json:"_class"`
    Year     int `json:"year"`
    Month    int `json:"month"`
    Day      int `json:"day"`
    Timezone string `json:"timezone"`
    Hour     int `json:"hour"`
    Minute   int `json:"minute"`
    Second   int `json:"second"`
}

type EffectiveDates struct {
    StartDate `json:"startDate"`
}

type Payload struct {
    EffectiveDates `json:"effectiveDates"`
}

var input = `{ 
  "effectiveDates" : {
     "startDate" : {
        "_class" : "com.sun.org.apache.xerces.internal.jaxp.datatype.XMLGregorianCalendarImpl", 
        "year" : 2008, 
        "month" : 10, 
        "day" : 16, 
        "timezone" : "-0300", 
        "hour" : 9, 
        "minute" : 50, 
        "second" : 13
     }
  }
}`

func main() {
    var p Payload
    var t time.Time
    err := json.Unmarshal([]byte(input[:]), &p)
    if err != nil {
        fmt.Println("error:", err)
    }
    timeStr := fmt.Sprintf("%d-%d-%d %d:%d:%d %s", p.Year, p.Month, p.Day, p.Hour, p.Minute, p.Second, p.Timezone)
    if t, err = time.Parse("2006-01-02 3:04:05 -0700", timeStr); err != nil {
        fmt.Println("error:", err)
    }
    fmt.Printf("%s", t.Format(time.RFC3339))
}