-
Notifications
You must be signed in to change notification settings - Fork 1
/
goparsethisdate.go
95 lines (87 loc) · 2.78 KB
/
goparsethisdate.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package main
import (
"fmt"
"time"
)
func ParseDateChannel(value string) (time.Time, error) {
years := []string{"2006", "06", ""}
months := []string{"Jan", "Jan.", "January", "01", "1", ""}
days := []string{"Mon", "Mon.", "Monday", "2", "02", "2nd", "2st", "2rd", "2th", ""}
delimiters := []string{"/", " ", "", ", "}
timeNumsFirst := []string{"3:04pm", "15:04", "3:04:05pm", "15:04:05", "3pm", ""}
c := make(chan time.Time, 2*len(delimiters)*len(delimiters)*len(delimiters)*len(days)*len(months)*len(years)*len(timeNumsFirst))
for _, year := range years {
for _, month := range months {
for _, day := range days {
for _, delimiter1 := range delimiters {
for _, delimiter2 := range delimiters {
for _, delimiter3 := range delimiters {
for _, timeNumFirst := range timeNumsFirst {
layout := timeNumFirst + delimiter3 + month + delimiter1 + day + delimiter2 + year
go func(layout string, value string) {
t, err := time.Parse(layout, value)
//fmt.Println(layout)
if err == nil {
c <- t
}
}(layout, value)
layout = month + delimiter1 + day + delimiter2 + year + delimiter3 + timeNumFirst
go func(layout string, value string) {
t, err := time.Parse(layout, value)
//fmt.Println(layout)
if err == nil {
c <- t
}
}(layout, value)
}
}
}
}
}
}
}
x := <-c
return x, nil
}
func ParseDate(value string) (time.Time, error) {
years := []string{"2006", "06", ""}
months := []string{"Jan", "Jan.", "January", "01", "1", ""}
days := []string{"Mon", "Mon.", "Monday", "2", "02", "2nd", "2st", "2rd", "2th", ""}
delimiters := []string{"/", " ", "", ", "}
timeNumsFirst := []string{"3:04pm", "15:04", "3:04:05pm", "15:04:05", "3pm", ""}
for _, year := range years {
for _, month := range months {
for _, day := range days {
for _, delimiter1 := range delimiters {
for _, delimiter2 := range delimiters {
for _, delimiter3 := range delimiters {
for _, timeNumFirst := range timeNumsFirst {
layout := timeNumFirst + delimiter3 + month + delimiter1 + day + delimiter2 + year
t, err := time.Parse(layout, value)
//fmt.Println(layout)
if err == nil {
return t, err
}
layout = month + delimiter1 + day + delimiter2 + year + delimiter3 + timeNumFirst
t, err = time.Parse(layout, value)
//fmt.Println(layout)
if err == nil {
return t, err
}
}
}
}
}
}
}
}
return time.Now(), fmt.Errorf("Could not find date")
}
func main() {
// start := time.Now()
// ParseDateChannel("Feb. 2nd 2016")
// fmt.Println(time.Since(start))
start := time.Now()
ParseDate("Feb. 2nd 2016")
fmt.Println(time.Since(start))
}