Home > Enterprise >  Convert timestamp and timezone into RFC3339 format
Convert timestamp and timezone into RFC3339 format

Time:11-17

I am taking timestamp from the user like this

2015-05-28T17:00:00

And a timezone "America/Los_Angeles" Now I want convert the date into something like

2015-05-28T17:00:00-07:00

Is that possible in go ,Please help me out in this ,if you have any links which you can share

CodePudding user response:

You can use ParseInLocation to parse datetime in specific location.

package main

import (
    "fmt"
    "time"
)

func main() {
    loc, err := time.LoadLocation("America/Los_Angeles")
    if err != nil {
        panic(err)
    }

    // Note: without explicit zone, returns time in given location.
    const shortForm = "2015-05-28T17:00:00"
    t, err := time.ParseInLocation("2006-01-02T15:04:05", shortForm, loc)
    if err != nil {
        panic(err)
    }
    fmt.Println(t)
}

Its output is:

2015-05-28 17:00:00 -0700 PDT

CodePudding user response:

"timezone" translates to time.Location in go. To load a location by name:

loc, err := time.LoadLocation("America/Los_Angeles")

Parsing:

  • to interpret the string as "that timestamp in that location":

    t, err := time.ParseInLocation("2006-01-02T15:04:05", input, loc)
    
  • to interpret the string as "that timestamp in UTC":

    t, err := time.Parse("2006-01-02T15:04:05", input)
    

Formatting:

to format t according to RFC3339 :

fmt.Println(t.Format(time.RFC3339))

t carries its own time.Location, you can also translate that timestamp to the timezone you see fit:

fmt.Println(t.In(loc).Format(time.RFC3339))
fmt.Println(t.UTC().Format(time.RFC3339))

https://go.dev/play/p/g2BgfdYGxU_I

  • Related