...
1 package utils
2
3 import (
4 "fmt"
5 "strconv"
6 "time"
7 )
8
9 var (
10
11 time_formats = []string{
12 "02/01/2006 15:04:05",
13 "2006-01-02 15:04:05",
14 "2006-01-02",
15 "02/01/2006",
16 "20060102T150405Z",
17 "20060102T150405",
18 "20060102Z",
19 "20060102",
20 "2006-01-02T15:04:05-07:00",
21 "2006-01-02T15:04:05",
22 }
23 )
24
25
26 func ParseTimestamp(ts string) (uint32, error) {
27 t, err := ParseTime(ts)
28 if err != nil {
29 return 0, err
30 }
31 return uint32(t.Unix()), nil
32 }
33
34
35 func ParseTimestampWithLocation(ts, tz string) (uint32, error) {
36 t, err := ParseTimeWithLocation(ts, tz)
37 if err != nil {
38 return 0, err
39 }
40 return uint32(t.Unix()), nil
41 }
42
43
44 func ParseTime(ts string) (time.Time, error) {
45 d, err := strconv.ParseUint(ts, 10, 64)
46 if err == nil {
47
48 t := time.Unix(int64(d), 0)
49 return t, nil
50 }
51 for _, tf := range time_formats {
52 t, err := time.Parse(tf, ts)
53 if err != nil {
54
55 continue
56 }
57 return t.UTC(), nil
58 }
59 return time.Time{}, fmt.Errorf("unknown time format \"%s\"", ts)
60 }
61
62
63 func ParseTimeWithLocation(ts, tz string) (time.Time, error) {
64 loc, err := time.LoadLocation(tz)
65 if err != nil {
66 return time.Time{}, err
67 }
68 for _, tf := range time_formats {
69 t, err := time.ParseInLocation(tf, ts, loc)
70 if err != nil {
71
72 continue
73 }
74 return t.UTC(), nil
75 }
76 return time.Time{}, fmt.Errorf("unknown time format \"%s\"", ts)
77 }
78
View as plain text