From b00a86af45aeeee1e442134d013fb6bb792217fc Mon Sep 17 00:00:00 2001 From: Aaron Raddon Date: Thu, 24 Apr 2014 17:51:56 -0700 Subject: [PATCH] Iso3339 support --- parseany.go | 16 ++++++++++++++++ parseany_test.go | 13 ++++++++++--- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/parseany.go b/parseany.go index 998f948..4385c4d 100644 --- a/parseany.go +++ b/parseany.go @@ -156,6 +156,22 @@ func parseFeatures(datestr string) Features { func ParseAny(datestr string) (time.Time, error) { f := parseFeatures(datestr) switch { + case f.Has(HAS_T): + //RFC3339 = "2006-01-02T15:04:05Z07:00" + if len(datestr) == len(time.RFC3339) { + if t, err := time.Parse(time.RFC3339, datestr); err == nil { + return t, nil + } else { + u.Error(err) + } + } else if len(datestr) == len(time.RFC3339Nano) { + // RFC3339Nano = "2006-01-02T15:04:05.999999999Z07:00" + if t, err := time.Parse(time.RFC3339Nano, datestr); err == nil { + return t, nil + } else { + u.Error(err) + } + } case f.Has(HAS_DASH) && !f.Has(HAS_SLASH): switch { case f.Has(HAS_WHITESPACE) && f.Has(HAS_COLON): diff --git a/parseany_test.go b/parseany_test.go index ec4592f..41c2e6c 100644 --- a/parseany_test.go +++ b/parseany_test.go @@ -1,6 +1,7 @@ package dateparse import ( + "fmt" u "github.com/araddon/gou" "github.com/bmizerany/assert" "testing" @@ -52,13 +53,19 @@ func init() { func TestParse(t *testing.T) { //f := parseFeatures("May 8, 2009 5:57:51 PM") - ts, _ := ParseAny("May 8, 2009 5:57:51 PM") + ts, err := ParseAny("May 8, 2009 5:57:51 PM") + assert.T(t, err == nil) //u.Debug(" ", ts.Unix()) //u.Debugf("%v", f) //u.Debugf("%v", ts) - assert.T(t, ts.Unix() == 1241805471) + assert.T(t, ts.In(time.UTC).Unix() == 1241805471) ts, _ = ParseAny("03/19/2012 10:11:59") - u.Debug(ts.Unix(), ts) + //u.Debug(ts.Unix(), ts) assert.T(t, ts.Unix() == 1332151919) + ts2, err := ParseAny("2009-08-12T22:15:09-07:00") + assert.T(t, err == nil) + //u.Debug(ts2.In(time.UTC), " ", ts2.Unix()) + assert.T(t, "2009-08-13 05:15:09 +0000 UTC" == fmt.Sprintf("%v", ts2.In(time.UTC))) + }