4/15/06 22:05 format closes #30

This commit is contained in:
Aaron Raddon 2017-11-18 10:21:24 -08:00
parent ca7e753bd1
commit 3007e2ec4a
3 changed files with 45 additions and 15 deletions

View File

@ -56,13 +56,13 @@ func main() {
for name, parser := range parsers { for name, parser := range parsers {
time.Local = nil time.Local = nil
table.AddRow(name, "time.Local = nil", parser(datestr, nil), parser(datestr, nil).In(time.UTC)) table.AddRow(name, "time.Local = nil", parser(datestr, nil, false), parser(datestr, nil, true))
if timezone != "" { if timezone != "" {
time.Local = loc time.Local = loc
table.AddRow(name, "time.Local = timezone arg", parser(datestr, loc), parser(datestr, loc).In(time.UTC)) table.AddRow(name, "time.Local = timezone arg", parser(datestr, loc, false), parser(datestr, loc, true))
} }
time.Local = time.UTC time.Local = time.UTC
table.AddRow(name, "time.Local = time.UTC", parser(datestr, time.UTC), parser(datestr, time.UTC).In(time.UTC)) table.AddRow(name, "time.Local = time.UTC", parser(datestr, time.UTC, false), parser(datestr, time.UTC, true))
} }
fmt.Println(table.Render()) fmt.Println(table.Render())
@ -72,20 +72,38 @@ func stuff() (string, string) {
return "more", "stuff" return "more", "stuff"
} }
type parser func(datestr string, loc *time.Location) time.Time type parser func(datestr string, loc *time.Location, utc bool) string
func parseLocal(datestr string, loc *time.Location) time.Time { func parseLocal(datestr string, loc *time.Location, utc bool) string {
time.Local = loc time.Local = loc
t, _ := dateparse.ParseLocal(datestr) t, err := dateparse.ParseLocal(datestr)
return t if err != nil {
return err.Error()
}
if utc {
return t.In(time.UTC).String()
}
return t.String()
} }
func parseIn(datestr string, loc *time.Location) time.Time { func parseIn(datestr string, loc *time.Location, utc bool) string {
t, _ := dateparse.ParseIn(datestr, loc) t, err := dateparse.ParseIn(datestr, loc)
return t if err != nil {
return err.Error()
}
if utc {
return t.In(time.UTC).String()
}
return t.String()
} }
func parseAny(datestr string, loc *time.Location) time.Time { func parseAny(datestr string, loc *time.Location, utc bool) string {
t, _ := dateparse.ParseAny(datestr) t, err := dateparse.ParseAny(datestr)
return t if err != nil {
return err.Error()
}
if utc {
return t.In(time.UTC).String()
}
return t.String()
} }

View File

@ -374,6 +374,7 @@ iterRunes:
// 04/2/2014 03:00:37 // 04/2/2014 03:00:37
// 3/1/2012 10:11:59 // 3/1/2012 10:11:59
// 4/8/2014 22:05 // 4/8/2014 22:05
// 4/8/14 22:05
switch r { switch r {
case ':': case ':':
state = stateDigitSlashWSColon state = stateDigitSlashWSColon
@ -384,6 +385,7 @@ iterRunes:
// 04/2/2014 03:00:37 // 04/2/2014 03:00:37
// 3/1/2012 10:11:59 // 3/1/2012 10:11:59
// 4/8/2014 22:05 // 4/8/2014 22:05
// 4/8/14 22:05
// 3/1/2012 10:11:59 AM // 3/1/2012 10:11:59 AM
switch r { switch r {
case ':': case ':':
@ -397,6 +399,7 @@ iterRunes:
// 04/2/2014 03:00:37 // 04/2/2014 03:00:37
// 3/1/2012 10:11:59 // 3/1/2012 10:11:59
// 4/8/2014 22:05 // 4/8/2014 22:05
// 4/8/14 22:05
// 3/1/2012 10:11:59 AM // 3/1/2012 10:11:59 AM
switch r { switch r {
case 'A', 'P': case 'A', 'P':
@ -773,7 +776,7 @@ iterRunes:
} }
} }
} else { } else {
for _, layout := range []string{"01/02/2006 15:04", "01/2/2006 15:04", "1/02/2006 15:04", "1/2/2006 15:04"} { for _, layout := range []string{"01/02/2006 15:04", "01/2/2006 15:04", "1/02/2006 15:04", "1/2/2006 15:04", "1/2/06 15:04", "01/02/06 15:04"} {
if t, err := parse(layout, datestr, loc); err == nil { if t, err := parse(layout, datestr, loc); err == nil {
return t, nil return t, nil
} }
@ -810,6 +813,7 @@ iterRunes:
// 3/1/2012 10:11:59 // 3/1/2012 10:11:59
// 03/1/2012 10:11:59 // 03/1/2012 10:11:59
// 3/01/2012 10:11:59 // 3/01/2012 10:11:59
// 4/8/14 22:05
if firstSlash == 4 { if firstSlash == 4 {
for _, layout := range []string{"2006/01/02 15:04:05", "2006/1/02 15:04:05", "2006/01/2 15:04:05", "2006/1/2 15:04:05"} { for _, layout := range []string{"2006/01/02 15:04:05", "2006/1/02 15:04:05", "2006/01/2 15:04:05", "2006/1/2 15:04:05"} {
if t, err := parse(layout, datestr, loc); err == nil { if t, err := parse(layout, datestr, loc); err == nil {

View File

@ -199,10 +199,18 @@ func TestParse(t *testing.T) {
ts = MustParse("4/8/2014 22:05") ts = MustParse("4/8/2014 22:05")
assert.Equal(t, "2014-04-08 22:05:00 +0000 UTC", fmt.Sprintf("%v", ts.In(time.UTC))) assert.Equal(t, "2014-04-08 22:05:00 +0000 UTC", fmt.Sprintf("%v", ts.In(time.UTC)))
ts = MustParse("4/18/2014 22:05")
assert.Equal(t, "2014-04-18 22:05:00 +0000 UTC", fmt.Sprintf("%v", ts.In(time.UTC)))
ts = MustParse("04/08/2014 22:05") ts = MustParse("04/08/2014 22:05")
assert.Equal(t, "2014-04-08 22:05:00 +0000 UTC", fmt.Sprintf("%v", ts.In(time.UTC))) assert.Equal(t, "2014-04-08 22:05:00 +0000 UTC", fmt.Sprintf("%v", ts.In(time.UTC)))
ts = MustParse("4/8/14 22:05")
assert.Equal(t, "2014-04-08 22:05:00 +0000 UTC", fmt.Sprintf("%v", ts.In(time.UTC)))
ts = MustParse("4/18/14 22:05")
assert.Equal(t, "2014-04-18 22:05:00 +0000 UTC", fmt.Sprintf("%v", ts.In(time.UTC)))
ts = MustParse("10/18/14 22:05")
assert.Equal(t, "2014-10-18 22:05:00 +0000 UTC", fmt.Sprintf("%v", ts.In(time.UTC)))
ts = MustParse("04/2/2014 4:00:51") ts = MustParse("04/2/2014 4:00:51")
assert.Equal(t, "2014-04-02 04:00:51 +0000 UTC", fmt.Sprintf("%v", ts.In(time.UTC))) assert.Equal(t, "2014-04-02 04:00:51 +0000 UTC", fmt.Sprintf("%v", ts.In(time.UTC)))