Skip to content

Commit 0eec95c

Browse files
author
Aaron Raddon
committed
New date format 2020-07-20+00:00 fixes #110
1 parent 36fa6fb commit 0eec95c

File tree

4 files changed

+49
-13
lines changed

4 files changed

+49
-13
lines changed

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,8 @@ var examples = []string{
154154
"2014-04",
155155
"2014",
156156
"2014-05-11 08:20:13,787",
157+
// yyyy-mm-dd-07:00
158+
"2020-07-20+08:00",
157159
// mm.dd.yy
158160
"3.31.2014",
159161
"03.31.2014",
@@ -302,6 +304,7 @@ func main() {
302304
| 2014-04 | 2014-04-01 00:00:00 +0000 UTC |
303305
| 2014 | 2014-01-01 00:00:00 +0000 UTC |
304306
| 2014-05-11 08:20:13,787 | 2014-05-11 08:20:13.787 +0000 UTC |
307+
| 2020-07-20+08:00 | 2020-07-20 00:00:00 +0800 +0800 |
305308
| 3.31.2014 | 2014-03-31 00:00:00 +0000 UTC |
306309
| 03.31.2014 | 2014-03-31 00:00:00 +0000 UTC |
307310
| 08.21.71 | 1971-08-21 00:00:00 +0000 UTC |

example/main.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,8 @@ var examples = []string{
111111
"2014-04",
112112
"2014",
113113
"2014-05-11 08:20:13,787",
114+
// yyyy-mm-dd-07:00
115+
"2020-07-20+08:00",
114116
// mm.dd.yy
115117
"3.31.2014",
116118
"03.31.2014",
@@ -259,6 +261,7 @@ func main() {
259261
| 2014-04 | 2014-04-01 00:00:00 +0000 UTC |
260262
| 2014 | 2014-01-01 00:00:00 +0000 UTC |
261263
| 2014-05-11 08:20:13,787 | 2014-05-11 08:20:13.787 +0000 UTC |
264+
| 2020-07-20+08:00 | 2020-07-20 00:00:00 +0800 +0800 |
262265
| 3.31.2014 | 2014-03-31 00:00:00 +0000 UTC |
263266
| 03.31.2014 | 2014-03-31 00:00:00 +0000 UTC |
264267
| 08.21.71 | 1971-08-21 00:00:00 +0000 UTC |

parseany.go

Lines changed: 38 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -61,35 +61,36 @@ const (
6161
dateYearDashDash
6262
dateYearDashDashWs // 5
6363
dateYearDashDashT
64+
dateYearDashDashOffset
6465
dateDigitDash
6566
dateDigitDashAlpha
66-
dateDigitDashAlphaDash
67-
dateDigitDot // 10
67+
dateDigitDashAlphaDash // 10
68+
dateDigitDot
6869
dateDigitDotDot
6970
dateDigitSlash
7071
dateDigitYearSlash
71-
dateDigitSlashAlpha
72-
dateDigitColon // 15
72+
dateDigitSlashAlpha // 15
73+
dateDigitColon
7374
dateDigitChineseYear
7475
dateDigitChineseYearWs
7576
dateDigitWs
76-
dateDigitWsMoYear
77-
dateDigitWsMolong // 20
77+
dateDigitWsMoYear // 20
78+
dateDigitWsMolong
7879
dateAlpha
7980
dateAlphaWs
8081
dateAlphaWsDigit
81-
dateAlphaWsDigitMore
82-
dateAlphaWsDigitMoreWs // 25
82+
dateAlphaWsDigitMore // 25
83+
dateAlphaWsDigitMoreWs
8384
dateAlphaWsDigitMoreWsYear
8485
dateAlphaWsMonth
8586
dateAlphaWsDigitYearmaybe
8687
dateAlphaWsMonthMore
87-
dateAlphaWsMonthSuffix // 30
88+
dateAlphaWsMonthSuffix
8889
dateAlphaWsMore
8990
dateAlphaWsAtTime
9091
dateAlphaWsAlpha
91-
dateAlphaWsAlphaYearmaybe
92-
dateAlphaPeriodWsDigit // 35
92+
dateAlphaWsAlphaYearmaybe // 35
93+
dateAlphaPeriodWsDigit
9394
dateWeekdayComma
9495
dateWeekdayAbbrevComma
9596
)
@@ -434,7 +435,14 @@ iterRunes:
434435
// 2006-01-02T15:04:05Z07:00
435436
// dateYearDashDashWs
436437
// 2013-04-01 22:43:22
438+
// dateYearDashDashOffset
439+
// 2020-07-20+00:00
437440
switch r {
441+
case '+', '-':
442+
p.offseti = i
443+
p.daylen = i - p.dayi
444+
p.stateDate = dateYearDashDashOffset
445+
p.setDay()
438446
case ' ':
439447
p.daylen = i - p.dayi
440448
p.stateDate = dateYearDashDashWs
@@ -454,6 +462,15 @@ iterRunes:
454462
// 2006-01-02T15:04:05Z07:00
455463
// 2020-08-17T17:00:00:000+0100
456464

465+
case dateYearDashDashOffset:
466+
// 2020-07-20+00:00
467+
switch r {
468+
case ':':
469+
p.set(p.offseti, "-07:00")
470+
// case ' ':
471+
// return nil, unknownErr(datestr)
472+
}
473+
457474
case dateYearDashAlphaDash:
458475
// 2013-Feb-03
459476
switch r {
@@ -1777,6 +1794,16 @@ iterRunes:
17771794
// 2006-01-2
17781795
return p, nil
17791796

1797+
case dateYearDashDashOffset:
1798+
/// 2020-07-20+00:00
1799+
switch len(p.datestr) - p.offseti {
1800+
case 5:
1801+
p.set(p.offseti, "-0700")
1802+
case 6:
1803+
p.set(p.offseti, "-07:00")
1804+
}
1805+
return p, nil
1806+
17801807
case dateYearDashAlphaDash:
17811808
// 2013-Feb-03
17821809
// 2013-Feb-3

parseany_test.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ import (
1111
func TestOne(t *testing.T) {
1212
time.Local = time.UTC
1313
var ts time.Time
14-
ts = MustParse("Thu, 17 Dec 2020 15:39:13 GMT")
15-
assert.Equal(t, "2020-12-17 15:39:13 +0000 UTC", fmt.Sprintf("%v", ts.In(time.UTC)))
14+
ts = MustParse("2020-07-20+08:00")
15+
assert.Equal(t, "2020-07-19 16:00:00 +0000 UTC", fmt.Sprintf("%v", ts.In(time.UTC)))
1616
}
1717

1818
type dateTest struct {
@@ -236,6 +236,9 @@ var testInputs = []dateTest{
236236
{in: "2014-04-02", out: "2014-04-02 00:00:00 +0000 UTC"},
237237
{in: "2014-03-31", out: "2014-03-31 00:00:00 +0000 UTC"},
238238
{in: "2014-4-2", out: "2014-04-02 00:00:00 +0000 UTC"},
239+
// yyyy-mm-dd-07:00
240+
{in: "2020-07-20+08:00", out: "2020-07-19 16:00:00 +0000 UTC"},
241+
{in: "2020-07-20+0800", out: "2020-07-19 16:00:00 +0000 UTC"},
239242
// dd-mmm-yy
240243
{in: "28-Feb-02", out: "2002-02-28 00:00:00 +0000 UTC"},
241244
{in: "15-Jan-18", out: "2018-01-15 00:00:00 +0000 UTC"},

0 commit comments

Comments
 (0)