parse 2016-06-21T19:55:00+01:00

This commit is contained in:
junichif 2017-07-11 11:00:40 -07:00
parent e5643ba62b
commit 47cec0dc4d
2 changed files with 23 additions and 0 deletions

View File

@ -36,6 +36,7 @@ const (
ST_DIGITDASHTZ ST_DIGITDASHTZ
ST_DIGITDASHTZDIGIT ST_DIGITDASHTZDIGIT
ST_DIGITDASHTDASH ST_DIGITDASHTDASH
ST_DIGITDASHTPLUS
ST_DIGITCOMMA ST_DIGITCOMMA
ST_DIGITCOLON ST_DIGITCOLON
ST_DIGITSLASH ST_DIGITSLASH
@ -217,9 +218,12 @@ iterRunes:
// With another dash aka time-zone at end // With another dash aka time-zone at end
// ST_DIGITDASHTDASH // ST_DIGITDASHTDASH
// 2017-06-25T17:46:57.45706582-07:00 // 2017-06-25T17:46:57.45706582-07:00
// 2017-06-25T17:46:57+04:00
switch { switch {
case r == '-': case r == '-':
state = ST_DIGITDASHTDASH state = ST_DIGITDASHTDASH
case r == '+':
state = ST_DIGITDASHTPLUS
case r == 'Z': case r == 'Z':
state = ST_DIGITDASHTZ state = ST_DIGITDASHTZ
} }
@ -514,6 +518,17 @@ iterRunes:
} else { } else {
return time.Time{}, err return time.Time{}, err
} }
case ST_DIGITDASHTPLUS:
// With a plus aka time-zone at end
// 2006-01-02T15:04:05.999999999+07:00
// 2006-01-02T15:04:05.999999+07:00
// 2006-01-02T15:04:05.999+07:00
// 2006-01-02T15:04:05+07:00
if t, err := time.Parse("2006-01-02T15:04:05-07:00", datestr); err == nil {
return t, nil
} else {
return time.Time{}, err
}
case ST_DIGITDASHTZDIGIT: case ST_DIGITDASHTZDIGIT:
// With a time-zone at end after Z // With a time-zone at end after Z
// 2006-01-02T15:04:05.999999999Z07:00 // 2006-01-02T15:04:05.999999999Z07:00

View File

@ -393,6 +393,14 @@ func TestParse(t *testing.T) {
assertf(t, err == nil, "%v", err) assertf(t, err == nil, "%v", err)
assert(t, "2014-05-11 08:20:13 +0000 UTC" == fmt.Sprintf("%v", ts.In(time.UTC))) assert(t, "2014-05-11 08:20:13 +0000 UTC" == fmt.Sprintf("%v", ts.In(time.UTC)))
ts, err = ParseAny("2016-06-21T19:55:00+01:00")
assertf(t, err == nil, "%v", err)
assert(t, "2016-06-21 18:55:00 +0000 UTC" == fmt.Sprintf("%v", ts.In(time.UTC)))
ts, err = ParseAny("2016-06-21T19:55:00.799+01:00")
assertf(t, err == nil, "%v", err)
assert(t, "2016-06-21 18:55:00.799 +0000 UTC" == fmt.Sprintf("%v", ts.In(time.UTC)))
ts, err = ParseAny("2014-05-11 08:20:13 +0000") ts, err = ParseAny("2014-05-11 08:20:13 +0000")
assertf(t, err == nil, "%v", err) assertf(t, err == nil, "%v", err)
assert(t, "2014-05-11 08:20:13 +0000 UTC" == fmt.Sprintf("%v", ts.In(time.UTC))) assert(t, "2014-05-11 08:20:13 +0000 UTC" == fmt.Sprintf("%v", ts.In(time.UTC)))