From ebdd2c1b809ca2db181b5b97149fa5623a90a18b Mon Sep 17 00:00:00 2001 From: Aaron Raddon Date: Sun, 5 Feb 2017 10:04:03 -0800 Subject: [PATCH] New date format --- example/main.go | 2 ++ parseany.go | 23 +++++++++++++++++++++++ parseany_test.go | 6 ++++++ 3 files changed, 31 insertions(+) diff --git a/example/main.go b/example/main.go index f3ed09f..19fac2d 100644 --- a/example/main.go +++ b/example/main.go @@ -17,6 +17,7 @@ var examples = []string{ "Mon Aug 10 15:44:11 UTC+0100 2015", "Fri Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time)", "Mon, 02 Jan 2006 15:04:05 -0700", + "12 Feb 2006, 19:17", "2015-02-18 00:12:00 +0000 GMT", "2015-02-18 00:12:00 +0000 UTC", "3/31/2014", @@ -91,6 +92,7 @@ func main() { | Mon Aug 10 15:44:11 UTC+0100 2015 | 2015-08-10 15:44:11 +0000 UTC | | Fri Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time) | 2015-07-03 18:04:07 +0100 GMT | | Mon, 02 Jan 2006 15:04:05 -0700 | 2006-01-02 15:04:05 -0700 -0700 | +| 12 Feb 2006, 19:17 | 2006-02-12 19:17:00 +0000 UTC | | 2015-02-18 00:12:00 +0000 GMT | 2015-02-18 00:12:00 +0000 UTC | | 2015-02-18 00:12:00 +0000 UTC | 2015-02-18 00:12:00 +0000 UTC | | 3/31/2014 | 2014-03-31 00:00:00 +0000 UTC | diff --git a/parseany.go b/parseany.go index 936ac4e..58c296e 100644 --- a/parseany.go +++ b/parseany.go @@ -27,6 +27,7 @@ const ( ST_DIGITSLASHWSCOLON ST_DIGITSLASHWSCOLONCOLON ST_DIGITSLASHWSCOLONCOLONAMPM + ST_DIGITALPHA ST_ALPHA ST_ALPHAWS ST_ALPHAWSCOMMA @@ -85,6 +86,9 @@ iterRunes: case ST_DIGIT: // starts digits if unicode.IsDigit(r) { continue + } else if unicode.IsLetter(r) { + state = ST_DIGITALPHA + continue } switch r { case ',': @@ -255,6 +259,25 @@ iterRunes: case 'A', 'P': state = ST_DIGITSLASHWSCOLONCOLONAMPM } + case ST_DIGITALPHA: + // 12 Feb 2006, 19:17 + // 12 Feb 2006, 19:17:22 + switch { + case len(datestr) == len("02 Jan 2006, 15:04"): + if t, err := time.Parse("02 Jan 2006, 15:04", datestr); err == nil { + return t, nil + } else { + return time.Time{}, err + } + case len(datestr) == len("02 Jan 2006, 15:04:05"): + if t, err := time.Parse("02 Jan 2006, 15:04:05", datestr); err == nil { + return t, nil + } else { + return time.Time{}, err + } + default: + //u.LogThrottle(u.WARN, 5, "ST_ALPHAWSALPHA case not found: %v", datestr) + } case ST_ALPHA: // starts alpha // May 8, 2009 5:57:51 PM // Mon Jan _2 15:04:05 2006 diff --git a/parseany_test.go b/parseany_test.go index f1bd944..f17c8e4 100644 --- a/parseany_test.go +++ b/parseany_test.go @@ -117,6 +117,12 @@ func TestParse(t *testing.T) { //u.Debug(ts.In(time.UTC).Unix(), ts.In(time.UTC)) assert.T(t, "2006-01-02 22:04:05 +0000 UTC" == fmt.Sprintf("%v", ts.In(time.UTC))) + // not sure if this is anything close to a standard, never seen it before + ts, err = ParseAny("12 Feb 2006, 19:17") + assert.Tf(t, err == nil, "%v", err) + //u.Debug(ts.In(time.UTC).Unix(), ts.In(time.UTC)) + assert.T(t, "2006-02-12 19:17:00 +0000 UTC" == fmt.Sprintf("%v", ts.In(time.UTC))) + ts, err = ParseAny("2015-02-18 00:12:00 +0000 GMT") assert.Tf(t, err == nil, "%v", err) assert.T(t, "2015-02-18 00:12:00 +0000 UTC" == fmt.Sprintf("%v", ts.In(time.UTC)))