-
Notifications
You must be signed in to change notification settings - Fork 1
/
evaluation.go
89 lines (78 loc) · 2.56 KB
/
evaluation.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
package dtf
import (
"regexp"
"strings"
)
const (
timezone = "([-+]([01][0-9]|2[0-4]):00|Z)"
year = "[1-9][0-9]{3}"
yearAndMonth = year + "-(1[0-2]|0[0-9])"
completeDate = yearAndMonth + "-([0-2][0-9]|3[0-1])"
hourMinutes = "([01][0-9]|2[0-3]):[0-5][0-9]"
withMinutes = completeDate + "T" + hourMinutes + timezone
withSeconds = completeDate + "T" + hourMinutes + ":([0-5][0-9]|60)" + timezone
withFractionOfSecond = completeDate + "T" + hourMinutes + ":([0-5][0-9]|60).[0-9]+" + timezone
)
var (
rYear = regexp.MustCompile("^" + year + "$")
rYearAndMonth = regexp.MustCompile("^" + yearAndMonth + "$")
rCompleteDate = regexp.MustCompile("^" + completeDate + "$")
rWithMinutes = regexp.MustCompile("^" + withMinutes + "$")
rWithSeconds = regexp.MustCompile("^" + withSeconds + "$")
rWithFractionOfSecond = regexp.MustCompile("^" + withFractionOfSecond + "$")
rUTC = regexp.MustCompile("Z$")
)
// IsYear check timeStr is 'YYYY'
func IsYear(timeStr string) bool {
return rYear.MatchString(timeStr)
}
// IsYearAndMonth check timeStr is 'YYYY-MM'
func IsYearAndMonth(timeStr string) bool {
return rYearAndMonth.MatchString(timeStr)
}
// IsCompleteDate check timeStr is 'YYYY-MM-DD'
func IsCompleteDate(timeStr string) bool {
return rCompleteDate.MatchString(timeStr)
}
// IsCompleteDateWithMinutes check timeStr is 'YYYY-MM-DDThh:mmTZD'
func IsCompleteDateWithMinutes(timeStr string) bool {
return rWithMinutes.MatchString(timeStr)
}
// IsCompleteDateWithSeconds check timeStr is 'YYYY-MM-DDThh:mm:ssTZD'
func IsCompleteDateWithSeconds(timeStr string) bool {
return rWithSeconds.MatchString(timeStr)
}
// IsCompleteDateWithFractionOfSecond check timeStr is 'YYYY-MM-DDThh:mm:ss.sTZD'
func IsCompleteDateWithFractionOfSecond(timeStr string) bool {
return rWithFractionOfSecond.MatchString(timeStr)
}
// IsUTC check timeStr is UTC or not
func IsUTC(timeStr string) bool {
return rUTC.MatchString(timeStr)
}
// IsW3CDTF check timeStr is match W3C-DTF format
func IsW3CDTF(timeStr string) bool {
if !strings.Contains(timeStr, "T") {
switch true {
case IsYear(timeStr):
return true
case IsYearAndMonth(timeStr):
return true
case IsCompleteDate(timeStr):
return true
default:
return false
}
} else {
switch true {
case IsCompleteDateWithMinutes(timeStr):
return true
case IsCompleteDateWithSeconds(timeStr):
return true
case IsCompleteDateWithFractionOfSecond(timeStr):
return true
default:
return false
}
}
}