Skip to content

Commit 249dd73

Browse files
Support git log format (Thu Apr 7 15:13:13 2005 -0700)
Adapt commit araddon@99d9682 from araddon#92 by https://github.com/jiangxin (merge timeWsYearOffset case and validate format)
1 parent 18ec8c6 commit 249dd73

File tree

2 files changed

+30
-5
lines changed

2 files changed

+30
-5
lines changed

parseany.go

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ const (
122122
timeWsOffsetColonAlpha
123123
timeWsOffsetColon
124124
timeWsYear // 16
125+
timeWsYearOffset
125126
timeOffset
126127
timeOffsetColon
127128
timeOffsetColonAlpha
@@ -997,13 +998,14 @@ iterRunes:
997998
}
998999

9991000
case dateAlpha:
1000-
// dateAlphaWS
1001+
// dateAlphaWs
10011002
// Mon Jan _2 15:04:05 2006
10021003
// Mon Jan _2 15:04:05 MST 2006
10031004
// Mon Jan 02 15:04:05 -0700 2006
1005+
// Mon Jan 02 15:04:05 2006 -0700
10041006
// Mon Aug 10 15:44:11 UTC+0100 2015
10051007
// Fri Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time)
1006-
// dateAlphaWSDigit
1008+
// dateAlphaWsDigit
10071009
// May 8, 2009 5:57:51 PM
10081010
// oct 1, 1970
10091011
// dateAlphaWsMonth
@@ -1135,6 +1137,7 @@ iterRunes:
11351137
// Mon Jan _2 15:04:05 2006
11361138
// Mon Jan _2 15:04:05 MST 2006
11371139
// Mon Jan 02 15:04:05 -0700 2006
1140+
// Mon Jan 02 15:04:05 2006 -0700
11381141
// Fri Jul 03 2015 18:04:07 GMT+0100 (GMT Daylight Time)
11391142
// Mon Aug 10 15:44:11 UTC+0100 2015
11401143
// dateAlphaWsDigit
@@ -1663,7 +1666,9 @@ iterRunes:
16631666
// timeWsOffsetColonAlpha
16641667
// 00:12:00 +00:00 UTC
16651668
// timeWsYear
1666-
// 00:12:00 2008
1669+
// 00:12:00 2008
1670+
// timeWsYearOffset
1671+
// 00:12:00 2008 -0700
16671672
// timeZ
16681673
// 15:04:05.99Z
16691674
switch r {
@@ -1688,6 +1693,23 @@ iterRunes:
16881693
p.yeari = i
16891694
}
16901695
}
1696+
case timeWsYear:
1697+
// timeWsYearOffset
1698+
// 00:12:00 2008 -0700
1699+
switch r {
1700+
case ' ':
1701+
p.yearlen = i - p.yeari
1702+
if !p.setYear() {
1703+
return p, unknownErr(datestr)
1704+
}
1705+
case '+', '-':
1706+
p.offseti = i
1707+
p.stateTime = timeWsYearOffset
1708+
default:
1709+
if !unicode.IsDigit(r) {
1710+
return p, unknownErr(datestr)
1711+
}
1712+
}
16911713
case timeWsAlpha:
16921714
// 06:20:00 UTC
16931715
// 06:20:00 UTC-05
@@ -2049,7 +2071,7 @@ iterRunes:
20492071
if p.mslen >= 10 {
20502072
return p, fmt.Errorf("fractional seconds in %q too long near %q", datestr, string(p.datestr[p.msi:p.mslen]))
20512073
}
2052-
case timeOffset, timeWsOffset:
2074+
case timeOffset, timeWsOffset, timeWsYearOffset:
20532075
switch len(p.datestr) - p.offseti {
20542076
case 3:
20552077
// 19:55:00+01 (or 19:55:00 +01)

parseany_test.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -443,6 +443,9 @@ var testInputs = []dateTest{
443443
{in: "4/2/2014, 04:08:09", out: "2014-04-02 04:08:09 +0000 UTC"},
444444
{in: "04/02/2014, 04:08 AM", out: "2014-04-02 04:08:00 +0000 UTC"},
445445
{in: "04/02/2014, 04:08 PM", out: "2014-04-02 16:08:00 +0000 UTC"},
446+
// Git log default date format - https://github.com/araddon/dateparse/pull/92
447+
{in: "Thu Apr 7 15:13:13 2005 -0700", out: "2005-04-07 22:13:13 +0000 UTC"},
448+
{in: "Tue Dec 12 23:07:11 2023 -0700", out: "2023-12-13 06:07:11 +0000 UTC"},
446449
// yyyy-mm-dd hh:mm:ss,000
447450
{in: "2014-05-11 08:20:13,787", out: "2014-05-11 08:20:13.787 +0000 UTC"},
448451
// yyyy-mm-dd hh:mm:ss +0000
@@ -1090,5 +1093,5 @@ func TestRetryAmbiguousDateWithSwap(t *testing.T) {
10901093

10911094
// Convenience function for debugging a particular broken test case
10921095
func TestDebug(t *testing.T) {
1093-
MustParse("Jul 9, 2012 at 5:02am (EST)")
1096+
MustParse("Tue Dec 12 23:07:11 2023 -0700")
10941097
}

0 commit comments

Comments
 (0)