3

I've been attempting to get a specific string output from pyhtons datetime (2006-01-02T15:04:05.000Z), so that I can easily parse it in golang using time.Parse.

I tried (in python)

datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S.%fZ')

Which will give me something like this: "2018-11-06T22:48:50.002750Z"

And when I try to parse it like this in Golang:

dtLayout := "2006-01-02T15:04:05.000Z"
dateStr := "2018-11-06T22:48:50.002750Z"

parsedDate, err := time.Parse(dtLayout, dateStr)
if err != nil {
    if err != nil {
        log.Printf("error: %v", err)
    }

I get this error:

2018/11/06 16:49:11 error: parsing time "2018-11-06T22:48:50.002750Z" as "2006-01-02T15:04:05.000Z": cannot parse "750Z" as "Z"

There's probably an easy way to do this using just milliseconds, but I'm stubborn and feel like I'm close.

1 Answer 1

5

Zeros in the fractional seconds must match the number of characters exactly, and as your error states, the portion after 750Z doesn't match the corresponding portion of the format string.

You can add the correct number of zeros, like "2006-01-02T15:04:05.000000Z", or use 9 as a more flexible format.

dtLayout := "2006-01-02T15:04:05.9Z"

https://play.golang.org/p/dyC0OXUnhhu

Sign up to request clarification or add additional context in comments.

1 Comment

The 9! That's the kind if solution I was looking for. Thank you so much, that works perfectly and doesn't feel too dirty :D

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.