mirror of
https://github.com/araddon/dateparse.git
synced 2024-11-10 11:51:54 +08:00
ampm format
This commit is contained in:
parent
36dfef3c74
commit
a793d0cb31
23
parseany.go
23
parseany.go
@ -116,7 +116,7 @@ func parseFeatures(datestr string) Features {
|
|||||||
features[HAS_NUMERIC] = HAS_NUMERIC
|
features[HAS_NUMERIC] = HAS_NUMERIC
|
||||||
} else if char == ' ' {
|
} else if char == ' ' {
|
||||||
//u.Info("is whitespace")
|
//u.Info("is whitespace")
|
||||||
state = s_WHITESPACE
|
//state = s_WHITESPACE
|
||||||
} else {
|
} else {
|
||||||
//u.Error("unrecognized input? ", char, " ", string(char))
|
//u.Error("unrecognized input? ", char, " ", string(char))
|
||||||
}
|
}
|
||||||
@ -136,13 +136,14 @@ func parseFeatures(datestr string) Features {
|
|||||||
}
|
}
|
||||||
lexeme = lexeme + string(char)
|
lexeme = lexeme + string(char)
|
||||||
case S_NUMERIC:
|
case S_NUMERIC:
|
||||||
|
//u.Infof("numeric: %v", string(char))
|
||||||
if unicode.IsLetter(char) {
|
if unicode.IsLetter(char) {
|
||||||
features[HAS_ALPHA] = HAS_ALPHA
|
features[HAS_ALPHA] = HAS_ALPHA
|
||||||
} else if unicode.IsNumber(char) {
|
} else if unicode.IsNumber(char) {
|
||||||
features[HAS_NUMERIC] = HAS_NUMERIC
|
features[HAS_NUMERIC] = HAS_NUMERIC
|
||||||
} else if char == ' ' {
|
} else if char == ' ' {
|
||||||
//u.Info("is whitespace")
|
//u.Info("is whitespace")
|
||||||
state = s_WHITESPACE
|
//state = s_WHITESPACE
|
||||||
} else {
|
} else {
|
||||||
//u.Error("unrecognized input? ", char, " ", string(char))
|
//u.Error("unrecognized input? ", char, " ", string(char))
|
||||||
}
|
}
|
||||||
@ -157,6 +158,8 @@ func parseFeatures(datestr string) Features {
|
|||||||
// Given an unknown date format, detect the type, parse, return time
|
// Given an unknown date format, detect the type, parse, return time
|
||||||
func ParseAny(datestr string) (time.Time, error) {
|
func ParseAny(datestr string) (time.Time, error) {
|
||||||
f := parseFeatures(datestr)
|
f := parseFeatures(datestr)
|
||||||
|
//u.Infof("%s alpha?%v colon?%v whitespace?%v dash?%v slash?%v AMPM?%v", datestr, f.Has(HAS_ALPHA),
|
||||||
|
// f.Has(HAS_COLON), f.Has(HAS_WHITESPACE), f.Has(HAS_DASH), f.Has(HAS_SLASH), f.Has(HAS_AMPM))
|
||||||
switch {
|
switch {
|
||||||
case f.Has(HAS_T):
|
case f.Has(HAS_T):
|
||||||
//RFC3339 = "2006-01-02T15:04:05Z07:00"
|
//RFC3339 = "2006-01-02T15:04:05Z07:00"
|
||||||
@ -176,7 +179,7 @@ func ParseAny(datestr string) (time.Time, error) {
|
|||||||
}
|
}
|
||||||
case f.Has(HAS_DASH) && !f.Has(HAS_SLASH):
|
case f.Has(HAS_DASH) && !f.Has(HAS_SLASH):
|
||||||
switch {
|
switch {
|
||||||
case f.Has(HAS_WHITESPACE) && f.Has(HAS_COLON):
|
case f.Has(HAS_WHITESPACE) && f.Has(HAS_COLON) && !f.Has(HAS_ALPHA):
|
||||||
//2014-04-26 05:24:37.3186369
|
//2014-04-26 05:24:37.3186369
|
||||||
//2006-01-02 15:04:05.000
|
//2006-01-02 15:04:05.000
|
||||||
//2006-01-02
|
//2006-01-02
|
||||||
@ -187,8 +190,18 @@ func ParseAny(datestr string) (time.Time, error) {
|
|||||||
} else {
|
} else {
|
||||||
u.Error(err)
|
u.Error(err)
|
||||||
}
|
}
|
||||||
} else if len(datestr) == len("2014-04-26 05:24:37.3186369") {
|
} else if len(datestr) == len("2014-04-26 05:24:37.000") {
|
||||||
if t, err := time.Parse("2006-01-02 03:04:05.000", datestr); err == nil {
|
if t, err := time.Parse("2006-01-02 15:04:05.000", datestr); err == nil {
|
||||||
|
return t, nil
|
||||||
|
} else {
|
||||||
|
u.Error(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
case f.Has(HAS_ALPHA):
|
||||||
|
//2006-01-02 03:04:05 PM
|
||||||
|
if len(datestr) == len("2014-04-26 03:24:37 PM") {
|
||||||
|
if t, err := time.Parse("2006-01-02 03:04:05 PM", datestr); err == nil {
|
||||||
return t, nil
|
return t, nil
|
||||||
} else {
|
} else {
|
||||||
u.Error(err)
|
u.Error(err)
|
||||||
|
@ -94,7 +94,26 @@ func TestParse(t *testing.T) {
|
|||||||
//2014-04-26 05:24:37.3186369
|
//2014-04-26 05:24:37.3186369
|
||||||
ts, err = ParseAny("2014-04-26 17:24:37.3186369")
|
ts, err = ParseAny("2014-04-26 17:24:37.3186369")
|
||||||
assert.T(t, err == nil)
|
assert.T(t, err == nil)
|
||||||
u.Debug(ts.Unix(), ts)
|
//u.Debug(ts.Unix(), ts)
|
||||||
assert.T(t, "2014-04-26 17:24:37.3186369 +0000 UTC" == fmt.Sprintf("%v", ts.In(time.UTC)))
|
assert.T(t, "2014-04-26 17:24:37.3186369 +0000 UTC" == fmt.Sprintf("%v", ts.In(time.UTC)))
|
||||||
|
|
||||||
|
//2014-04-26 17:24:37.123
|
||||||
|
ts, err = ParseAny("2014-04-26 17:24:37.123")
|
||||||
|
assert.T(t, err == nil)
|
||||||
|
u.Debugf("unix=%v ts='%v'", ts.Unix(), ts)
|
||||||
|
assert.T(t, "2014-04-26 17:24:37.123 +0000 UTC" == fmt.Sprintf("%v", ts.In(time.UTC)))
|
||||||
|
|
||||||
|
//2014-04-26 05:24:37 PM
|
||||||
|
ts, err = ParseAny("2014-04-26 05:24:37 PM")
|
||||||
|
assert.T(t, err == nil)
|
||||||
|
u.Debug(ts.Unix(), ts)
|
||||||
|
assert.T(t, "2014-04-26 17:24:37 +0000 UTC" == fmt.Sprintf("%v", ts.In(time.UTC)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// func TestParseAMPM(t *testing.T) {
|
||||||
|
// //2014-04-26 05:24:37 PM
|
||||||
|
// ts, err := ParseAny("2014-04-26 05:24:37 PM")
|
||||||
|
// assert.T(t, err == nil)
|
||||||
|
// u.Debug(ts.Unix(), ts)
|
||||||
|
// assert.T(t, "2014-04-26 17:24:37 +0000 UTC" == fmt.Sprintf("%v", ts.In(time.UTC)))
|
||||||
|
// }
|
||||||
|
Loading…
Reference in New Issue
Block a user