-49
util/time.go
-49
util/time.go
···
1
1
package util
2
2
3
-
import (
4
-
"fmt"
5
-
"time"
6
-
)
7
-
8
3
const ISO8601 = "2006-01-02T15:04:05.000Z"
9
-
10
-
const ISO8601_milli = "2006-01-02T15:04:05.000000Z"
11
-
12
-
const ISO8601_numtz = "2006-01-02T15:04:05.000-07:00"
13
-
14
-
const ISO8601_numtz_milli = "2006-01-02T15:04:05.000000-07:00"
15
-
16
-
const ISO8601_sec = "2006-01-02T15:04:05Z"
17
-
18
-
const ISO8601_numtz_sec = "2006-01-02T15:04:05-07:00"
19
-
20
-
func ParseTimestamp(s string) (time.Time, error) {
21
-
t, err := time.Parse(ISO8601, s)
22
-
if err == nil {
23
-
return t, nil
24
-
}
25
-
26
-
t, err = time.Parse(ISO8601_milli, s)
27
-
if err == nil {
28
-
return t, nil
29
-
}
30
-
31
-
t, err = time.Parse(ISO8601_numtz, s)
32
-
if err == nil {
33
-
return t, nil
34
-
}
35
-
36
-
t, err = time.Parse(ISO8601_numtz_milli, s)
37
-
if err == nil {
38
-
return t, nil
39
-
}
40
-
41
-
t, err = time.Parse(ISO8601_sec, s)
42
-
if err == nil {
43
-
return t, nil
44
-
}
45
-
46
-
t, err = time.Parse(ISO8601_numtz_sec, s)
47
-
if err == nil {
48
-
return t, nil
49
-
}
50
-
51
-
return time.Time{}, fmt.Errorf("failed to parse %q as timestamp", s)
52
-
}
-20
util/time_test.go
-20
util/time_test.go
···
1
-
package util
2
-
3
-
import "testing"
4
-
5
-
func TestTimeParsing(t *testing.T) {
6
-
good := []string{
7
-
"2023-07-19T21:54:14.165300Z",
8
-
"2023-07-19T21:54:14.163Z",
9
-
"2023-07-19T21:52:02.000+00:00",
10
-
"2023-07-19T21:52:02.123456+00:00",
11
-
"2023-09-13T11:23:33+09:00",
12
-
}
13
-
14
-
for _, g := range good {
15
-
_, err := ParseTimestamp(g)
16
-
if err != nil {
17
-
t.Fatal(err)
18
-
}
19
-
}
20
-
}