What is the equivalent code in golang for the following shell command ? date -u +%Y-%m-%dT%T%z
5 Answers
package main import ( "time" "fmt" ) func main(){ fmt.Println(time.Now().Format(time.RFC3339)) } 6package main import ( "fmt" "time" ) func main() { fmt.Println(time.Now().UTC().Format("2006-01-02T15:04:05-0700")) } 0I had the following spec:
YYYY-MM-DDThh:mm:ss.sssZ with the final Z being explicitly present in the examples.
Here's how I dealt with it:
- first I found the
time.RFCxxxthat was the closest to my target - I copied its value
- I fiddled with it until I found the expected result
which is
2006-01-02T15:04:05.999Z 2ISO8601 allows for variable levels of granularity. You can have just a year, year+month, year+month+day, add a time portion, and optionally have a timezone portion. Go's built-in time parsing, however, requires you to know ahead-of-time which parts will be included.
The library provides a more flexible parser that can handle all the commonly used ISO8601 formats. See
Disclosure: I wrote that library.
2Replacing the sign in the format with a Z triggers the ISO 8601 behavior. Which is exactly time.RFC3339. If you are wanting the string output to end in 'Z' what you need to do is convert to the UTC zone.
package main import ( "fmt" "time" ) func main() { fmt.Println(time.Now().UTC().Format("2006-01-02T15:04:05Z07:00")) } // this is the same format used by RFC3339. just a note on why. 3