utils/time.go (38 lines of code) (raw):

package utils import "time" //copy from https://github.com/Knetic/govaluate/blob/0580e9b47a69125afa0e4ebd1cf93c49eb5a43ec/parsing.go#L258 // TryParseTime tries to parse a string into a time.Time object. func TryParseTime(candidate string) (time.Time, bool) { var ret time.Time var found bool timeFormats := [...]string{ "2006-01-02 15:04:05", // RFC 3339 with seconds "2006-01-02 15:04", // RFC 3339 with minutes "2006-01-02", // RFC 3339 time.RFC3339, time.RFC3339Nano, "2006-01-02 15:04:05-07:00", // RFC 3339 with seconds and timezone "2006-01-02T15Z0700", // ISO8601 with hour "2006-01-02T15:04Z0700", // ISO8601 with minutes "2006-01-02T15:04:05Z0700", // ISO8601 with seconds "2006-01-02T15:04:05.999999999Z0700", // ISO8601 with nanoseconds time.ANSIC, time.UnixDate, time.RubyDate, time.Kitchen, } for _, format := range timeFormats { ret, found = tryParseExactTime(candidate, format) if found { return ret, true } } return time.Now(), false } func tryParseExactTime(candidate string, format string) (time.Time, bool) { var ret time.Time var err error ret, err = time.Parse(format, candidate) if err != nil { return time.Now(), false } return ret, true }