kausal_malladi
kausal_malladi

Reputation: 1697

Parsing mysql datetime to golang time

I have MySQL datetime in my table in the MySQL standard format like

"2018-09-19 18:26:32.000000"

and when I try converting it ti golang time using time.parse() function, I get the error that

parsing time "2018-09-19 18:26:32.000000": month out of range

I tried searching online and the format seems to be allowed and commonly used by many to successfully parse.

Can anyone help me with what I am missing? Below is the code snippet that I am using.

import (
    "fmt"
    "time"
)

layout := "2018-09-19 18:26:32.000000"
fmt.Println(val)
// prints 2018-09-19 18:26:32.000000
t, err := time.Parse(layout, val)
fmt.Println(fmt.Println(t.Unix()))
// prints -62135596800 
fmt.Println(err)
// prints parsing time "2018-09-19 18:26:32.000000": month out of range

Upvotes: 1

Views: 5933

Answers (1)

Ullaakut
Ullaakut

Reputation: 3744

Your layout is wrong, it should be "2006-01-02 15:04:05.000000". The documentation states:

Parse parses a formatted string and returns the time value it represents. The layout defines the format by showing how the reference time, defined to be

Mon Jan 2 15:04:05 -0700 MST 2006

would be interpreted if it were the value; it serves as an example of the input format. The same interpretation will then be made to the input string.

package main

import (
    "fmt"
    "time"
)

func main() {

    val := "2018-09-19 18:26:32.000000"
    layout := "2006-01-02 15:04:05.000000"
    t, _ := time.Parse(layout, val)
    fmt.Println(t.Unix()) // prints 1537381592
}

Outputs

1537381592

Try it here

Upvotes: 3

Related Questions