From 313c79f3ccc61cee69216b3a31b63d3d31ac02f1 Mon Sep 17 00:00:00 2001 From: Christine Dodrill Date: Wed, 10 Feb 2016 10:31:31 -0800 Subject: [PATCH] Fix the time parsing code to handle things seen in the real world --- src/time/time.go | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/src/time/time.go b/src/time/time.go index 4df3a4c..a01aaf2 100644 --- a/src/time/time.go +++ b/src/time/time.go @@ -4,20 +4,36 @@ import "time" import "C" +var times []string = []string{ + "2006-01-02T15:04:05.000000-07:00", + "2006-01-02T15:04:05-07:00", + time.RFC3339, + "2006-01-02T15:04-7000", + "2006-01-02T15:04:05-0700", + "2006-01-02T15:04:05.000000", +} + +func tryTimes(inp string) *time.Time { + var t time.Time + var err error + + for _, fmtString := range times { + t, err = time.Parse(fmtString, inp) + if err == nil { + break + } + } + + return &t +} + //export fixTime func fixTime(inp *C.char) *int64 { gostr := C.GoString(inp) - t, err := time.Parse("2006-01-02T15:04:05.000000-07:00", gostr) - if err != nil { - t, err = time.Parse("2006-01-02T15:04:05-07:00", gostr) + t := tryTimes(gostr) - if err != nil { - return nil - } - } - - res := t.Unix() + res := (*t).Unix() return &res }