Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Golang date time struct

Tags:

json

go

bson

I'm trying to build golang date time struct and I'm having some issues. Please help me build the model.

Thanks again

 "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)
    }
}
like image 820
user3066155 Avatar asked Mar 11 '23 12:03

user3066155


1 Answers

This should be enough to get you going. There are a couple quirks:

  • The NumberInt(n) values are not valid JSON, so I've assumed they come in from the GET call as a number
  • The timezone NumberInt will need to be converted to a string, and massaged into the form -0700. I've left that as an exercise for you

Here's my solution:

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))
}
like image 177
jxstanford Avatar answered Mar 21 '23 03:03

jxstanford