How to parse/format RFC3339 date time string in Go
RFC3339 widely used standard for the date time format across the web.
Both backend and frontend will use this format to communicate about the DateTime.
Most common RFC3339 date time format is
2022-09-18T07:25:40.20Z
Method 1 : Using time.parse() method and time.RFC3339 constant
To parse/format RFC3339 date time in Go, we can use time.parse method along with time.RFC3339 constant in golang time package.
Let’s go through an example to understand it further.
package main
import (
"fmt"
"time"
)
/** Parsing RFC3339 date format in Go**/
func main() {
RFC3339dateString := "2022-09-18T07:25:40.20Z"
fmt.Println("Input date time", RFC3339dateString)
formattedDate, err := time.Parse(time.RFC3339, RFC3339dateString)
if err != nil {
fmt.Println("Error while parsing the date time :", err)
}
fmt.Println(formattedDate)
}
I have imported the time package and passed time.RFC3339 constant to the time.parse() method.
// Output
Input date time 2022-09-18T07:25:40.20Z
2022-09-18 07:25:40.2 +0000 UTC
Method 2: Using exact date time layout.
Instead of using time.RFC3339 constant we can pass the exact date time format string as parameter to the time.parse() method.
package main
import (
"fmt"
"time"
)
/** Parsing RFC3339 date format using time format string**/
func main() {
RFC3339dateLayout := "2006-01-02T15:04:05Z07:00"
RFC3339dateString := "2022-09-18T07:25:40.20Z"
fmt.Println("Input date time", RFC3339dateString)
formattedDate, err := time.Parse(RFC3339dateLayout, RFC3339dateString)
if err != nil {
fmt.Println("Error while parsing the date time :", err)
}
fmt.Println(formattedDate)
}
The date time format string taken from here
Do not prefer this method.
The date time format “2006-01-02T15:04:05Z07:00” is nothing but the value of time.RFC3339 constant.