louxiu
louxiu

Reputation: 2915

parse time string type back to time type error

package main

import "fmt"
import "time"

func main() {
    source := "2014-04-22 23:41:12.518845115 +0800 CST"
    Form := "2014-04-22 23:41:12.518845115 +0800 CST"
    t, err := time.Parse(Form, source)

    if err == nil {
        fmt.Println(t.String())
    } else {
        fmt.Println(err)
    }
}

Error :parsing time "2014-04-22 23:41:12 +0800 CST": month out of range

I get source by time.Now().String(), but I could not convert it back. What's wrong with this piece of code?

Upvotes: 0

Views: 126

Answers (1)

Linear
Linear

Reputation: 22236

From the documentation:

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

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. Predefined layouts ANSIC, UnixDate, RFC3339 and others describe standard and convenient representations of the reference time. For more information about the formats and the definition of the reference time, see the documentation for ANSIC and the other constants defined by this package.

(Bolding mine).

So what you want is

Form := "2006-01-02 15:04:05.000000000 -0700 MST"

Which is the date listed in that quote in the format of your input string. One thing to note while I was writing this on the playground to confirm is that it looks like on the part 05.000000000 (the seconds and fractions of seconds) you need the format string to contain exactly as many decimal points as the string you want to parse.

Here's a playground version showing it works: http://play.golang.org/p/dRniJbqgl7

Upvotes: 2

Related Questions