mirror of
https://github.com/araddon/dateparse.git
synced 2024-11-10 11:51:54 +08:00
new format april 3, 2018 closes #59
This commit is contained in:
parent
1e64c9214a
commit
5025a49c02
@ -85,6 +85,7 @@ var examples = []string{
|
|||||||
"Mon Aug 10 15:44:11 UTC+0100 2015",
|
"Mon Aug 10 15:44:11 UTC+0100 2015",
|
||||||
"Fri Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time)",
|
"Fri Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time)",
|
||||||
"September 17, 2012 at 10:09am PST-08",
|
"September 17, 2012 at 10:09am PST-08",
|
||||||
|
"October 7, 1970",
|
||||||
"12 Feb 2006, 19:17",
|
"12 Feb 2006, 19:17",
|
||||||
"12 Feb 2006 19:17",
|
"12 Feb 2006 19:17",
|
||||||
"7 oct 70",
|
"7 oct 70",
|
||||||
@ -207,6 +208,7 @@ func main() {
|
|||||||
| Mon Aug 10 15:44:11 UTC+0100 2015 | 2015-08-10 15:44:11 +0000 UTC |
|
| 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 |
|
| Fri Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time) | 2015-07-03 18:04:07 +0100 GMT |
|
||||||
| September 17, 2012 at 10:09am PST-08 | 2012-09-17 10:09:00 -0800 PST |
|
| September 17, 2012 at 10:09am PST-08 | 2012-09-17 10:09:00 -0800 PST |
|
||||||
|
| October 7, 1970 | 1970-10-07 00:00:00 +0000 UTC |
|
||||||
| 12 Feb 2006, 19:17 | 2006-02-12 19:17:00 +0000 UTC |
|
| 12 Feb 2006, 19:17 | 2006-02-12 19:17:00 +0000 UTC |
|
||||||
| 12 Feb 2006 19:17 | 2006-02-12 19:17:00 +0000 UTC |
|
| 12 Feb 2006 19:17 | 2006-02-12 19:17:00 +0000 UTC |
|
||||||
| 7 oct 70 | 1970-10-07 00:00:00 +0000 UTC |
|
| 7 oct 70 | 1970-10-07 00:00:00 +0000 UTC |
|
||||||
|
@ -24,6 +24,7 @@ var examples = []string{
|
|||||||
"Mon Aug 10 15:44:11 UTC+0100 2015",
|
"Mon Aug 10 15:44:11 UTC+0100 2015",
|
||||||
"Fri Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time)",
|
"Fri Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time)",
|
||||||
"September 17, 2012 at 10:09am PST-08",
|
"September 17, 2012 at 10:09am PST-08",
|
||||||
|
"October 7, 1970",
|
||||||
"12 Feb 2006, 19:17",
|
"12 Feb 2006, 19:17",
|
||||||
"12 Feb 2006 19:17",
|
"12 Feb 2006 19:17",
|
||||||
"7 oct 70",
|
"7 oct 70",
|
||||||
@ -146,6 +147,7 @@ func main() {
|
|||||||
| Mon Aug 10 15:44:11 UTC+0100 2015 | 2015-08-10 15:44:11 +0000 UTC |
|
| 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 |
|
| Fri Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time) | 2015-07-03 18:04:07 +0100 GMT |
|
||||||
| September 17, 2012 at 10:09am PST-08 | 2012-09-17 10:09:00 -0800 PST |
|
| September 17, 2012 at 10:09am PST-08 | 2012-09-17 10:09:00 -0800 PST |
|
||||||
|
| October 7, 1970 | 1970-10-07 00:00:00 +0000 UTC |
|
||||||
| 12 Feb 2006, 19:17 | 2006-02-12 19:17:00 +0000 UTC |
|
| 12 Feb 2006, 19:17 | 2006-02-12 19:17:00 +0000 UTC |
|
||||||
| 12 Feb 2006 19:17 | 2006-02-12 19:17:00 +0000 UTC |
|
| 12 Feb 2006 19:17 | 2006-02-12 19:17:00 +0000 UTC |
|
||||||
| 7 oct 70 | 1970-10-07 00:00:00 +0000 UTC |
|
| 7 oct 70 | 1970-10-07 00:00:00 +0000 UTC |
|
||||||
|
62
parseany.go
62
parseany.go
@ -6,6 +6,7 @@ package dateparse
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
"unicode"
|
"unicode"
|
||||||
"unicode/utf8"
|
"unicode/utf8"
|
||||||
@ -16,6 +17,21 @@ import (
|
|||||||
// gou.SetColorOutput()
|
// gou.SetColorOutput()
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
var months = []string{
|
||||||
|
"january",
|
||||||
|
"february",
|
||||||
|
"march",
|
||||||
|
"april",
|
||||||
|
"may",
|
||||||
|
"june",
|
||||||
|
"july",
|
||||||
|
"august",
|
||||||
|
"september",
|
||||||
|
"october",
|
||||||
|
"november",
|
||||||
|
"december",
|
||||||
|
}
|
||||||
|
|
||||||
type dateState uint8
|
type dateState uint8
|
||||||
type timeState uint8
|
type timeState uint8
|
||||||
|
|
||||||
@ -41,6 +57,7 @@ const (
|
|||||||
dateAlphaWsDigitComma
|
dateAlphaWsDigitComma
|
||||||
dateAlphaWsDigitCommaWs
|
dateAlphaWsDigitCommaWs
|
||||||
dateAlphaWsDigitCommaWsYear
|
dateAlphaWsDigitCommaWsYear
|
||||||
|
dateAlphaWsMonth
|
||||||
dateAlphaWsAlpha
|
dateAlphaWsAlpha
|
||||||
dateAlphaWsAlphaYearmaybe
|
dateAlphaWsAlphaYearmaybe
|
||||||
dateWeekdayComma
|
dateWeekdayComma
|
||||||
@ -628,7 +645,10 @@ iterRunes:
|
|||||||
// dateAlphaWSDigit
|
// dateAlphaWSDigit
|
||||||
// May 8, 2009 5:57:51 PM
|
// May 8, 2009 5:57:51 PM
|
||||||
// oct 1, 1970
|
// oct 1, 1970
|
||||||
//
|
// dateAlphaWsMonth
|
||||||
|
// April 8, 2009
|
||||||
|
// dateAlphaWsMonthTime
|
||||||
|
// January 02, 2006 at 3:04pm MST-07
|
||||||
// dateWeekdayComma
|
// dateWeekdayComma
|
||||||
// Monday, 02 Jan 2006 15:04:05 MST
|
// Monday, 02 Jan 2006 15:04:05 MST
|
||||||
// Monday, 02-Jan-06 15:04:05 MST
|
// Monday, 02-Jan-06 15:04:05 MST
|
||||||
@ -643,14 +663,30 @@ iterRunes:
|
|||||||
switch {
|
switch {
|
||||||
case r == ' ':
|
case r == ' ':
|
||||||
if i > 4 {
|
if i > 4 {
|
||||||
// September 17, 2012 at 5:00pm UTC-05
|
prefix := strings.ToLower(datestr[0:i])
|
||||||
// This one doesn't follow standard parse methodologies. the "January"
|
for _, month := range months {
|
||||||
// is difficult to use the format string replace method because of its variable-length (march, june)
|
if prefix == month {
|
||||||
// so we just use this format here. If we see more similar to this we will do something else.
|
// len(" 31, 2018") = 9
|
||||||
p.format = []byte("January 02, 2006 at 3:04pm MST-07")
|
if len(datestr[i:]) < 10 {
|
||||||
return p, nil
|
// April 8, 2009
|
||||||
|
p.dayi = i + 1
|
||||||
|
p.stateDate = dateAlphaWsMonth
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if p.stateDate != dateAlphaWsMonth {
|
||||||
|
// September 17, 2012 at 5:00pm UTC-05
|
||||||
|
// This one doesn't follow standard parse methodologies. the "January"
|
||||||
|
// is difficult to use the format string replace method because of its variable-length (march, june)
|
||||||
|
// so we just use this format here. If we see more similar to this we will do something else.
|
||||||
|
p.format = []byte("January 02, 2006 at 3:04pm MST-07")
|
||||||
|
return p, nil
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
p.stateDate = dateAlphaWs
|
||||||
}
|
}
|
||||||
p.stateDate = dateAlphaWs
|
|
||||||
case r == ',':
|
case r == ',':
|
||||||
// p.moi = 0
|
// p.moi = 0
|
||||||
// p.molen = i
|
// p.molen = i
|
||||||
@ -667,6 +703,16 @@ iterRunes:
|
|||||||
// just lay down the skip, no need to fill and then skip
|
// just lay down the skip, no need to fill and then skip
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
case dateAlphaWsMonth:
|
||||||
|
// April 8, 2009
|
||||||
|
if r == ',' {
|
||||||
|
if i-p.dayi == 2 {
|
||||||
|
p.format = []byte("January 02, 2006")
|
||||||
|
return p, nil
|
||||||
|
}
|
||||||
|
p.format = []byte("January 2, 2006")
|
||||||
|
return p, nil
|
||||||
|
}
|
||||||
case dateWeekdayComma:
|
case dateWeekdayComma:
|
||||||
// Monday, 02 Jan 2006 15:04:05 MST
|
// Monday, 02 Jan 2006 15:04:05 MST
|
||||||
// Monday, 02 Jan 2006 15:04:05 -0700
|
// Monday, 02 Jan 2006 15:04:05 -0700
|
||||||
|
@ -13,8 +13,8 @@ func TestOne(t *testing.T) {
|
|||||||
var ts time.Time
|
var ts time.Time
|
||||||
// {in: "2015-02-08 03:02:00 +0300 MSK m=+0.000000001", out: "2015-02-08 00:02:00 +0000 UTC"},
|
// {in: "2015-02-08 03:02:00 +0300 MSK m=+0.000000001", out: "2015-02-08 00:02:00 +0000 UTC"},
|
||||||
// {in: "2015-02-08 03:02:00.001 +0300 MSK m=+0.000000001", out: "2015-02-08 00:02:00.001 +0000 UTC"},
|
// {in: "2015-02-08 03:02:00.001 +0300 MSK m=+0.000000001", out: "2015-02-08 00:02:00.001 +0000 UTC"},
|
||||||
ts = MustParse("2018.05")
|
ts = MustParse("April 3, 2018")
|
||||||
assert.Equal(t, "2018-05-01 00:00:00 +0000 UTC", fmt.Sprintf("%v", ts.In(time.UTC)))
|
assert.Equal(t, "2018-04-03 00:00:00 +0000 UTC", fmt.Sprintf("%v", ts.In(time.UTC)))
|
||||||
}
|
}
|
||||||
|
|
||||||
type dateTest struct {
|
type dateTest struct {
|
||||||
@ -58,9 +58,12 @@ var testInputs = []dateTest{
|
|||||||
{in: "Fri Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time)", out: "2015-07-03 17:04:07 +0000 UTC"},
|
{in: "Fri Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time)", out: "2015-07-03 17:04:07 +0000 UTC"},
|
||||||
{in: "Fri Jul 3 2015 06:04:07 GMT+0100 (GMT Daylight Time)", out: "2015-07-03 05:04:07 +0000 UTC"},
|
{in: "Fri Jul 3 2015 06:04:07 GMT+0100 (GMT Daylight Time)", out: "2015-07-03 05:04:07 +0000 UTC"},
|
||||||
{in: "Fri Jul 3 2015 06:04:07 PST-0700 (Pacific Daylight Time)", out: "2015-07-03 13:04:07 +0000 UTC"},
|
{in: "Fri Jul 3 2015 06:04:07 PST-0700 (Pacific Daylight Time)", out: "2015-07-03 13:04:07 +0000 UTC"},
|
||||||
// Month dd, yyyy
|
// Month dd, yyyy time
|
||||||
{in: "September 17, 2012 at 5:00pm UTC-05", out: "2012-09-17 17:00:00 +0000 UTC"},
|
{in: "September 17, 2012 at 5:00pm UTC-05", out: "2012-09-17 17:00:00 +0000 UTC"},
|
||||||
{in: "September 17, 2012 at 10:09am PST-08", out: "2012-09-17 18:09:00 +0000 UTC"},
|
{in: "September 17, 2012 at 10:09am PST-08", out: "2012-09-17 18:09:00 +0000 UTC"},
|
||||||
|
// Monty dd, yyyy
|
||||||
|
{in: "September 17, 2012", out: "2012-09-17 00:00:00 +0000 UTC"},
|
||||||
|
{in: "May 7, 2012", out: "2012-05-07 00:00:00 +0000 UTC"},
|
||||||
// ?
|
// ?
|
||||||
{in: "Fri, 03 Jul 2015 08:08:08 MST", out: "2015-07-03 08:08:08 +0000 UTC"},
|
{in: "Fri, 03 Jul 2015 08:08:08 MST", out: "2015-07-03 08:08:08 +0000 UTC"},
|
||||||
{in: "Fri, 03 Jul 2015 08:08:08 PST", out: "2015-07-03 15:08:08 +0000 UTC", loc: "America/Los_Angeles"},
|
{in: "Fri, 03 Jul 2015 08:08:08 PST", out: "2015-07-03 15:08:08 +0000 UTC", loc: "America/Los_Angeles"},
|
||||||
|
Loading…
Reference in New Issue
Block a user