forked from argoproj/pkg
-
Notifications
You must be signed in to change notification settings - Fork 0
/
strftime.go
60 lines (56 loc) · 1.22 KB
/
strftime.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
package strftime
// Adapted from: github.com/jehiah/go-strftime to expose available format characters
import (
"strings"
"time"
)
// FormatChars are the supported characters for strftime. It is a subset of all strftime characters
// See also, time/format.go
var FormatChars = map[rune]string{
'B': "January",
'b': "Jan",
'm': "01",
'A': "Monday",
'a': "Mon",
'd': "02",
'H': "15",
'I': "03",
'M': "04",
'S': "05",
'Y': "2006",
'y': "06",
'p': "PM",
'Z': "MST",
'z': "-0700",
'L': ".000",
}
// Format formats a time object using strftime syntax
func Format(format string, t time.Time) string {
retval := make([]byte, 0, len(format))
for i, ni := 0, 0; i < len(format); i = ni + 2 {
ni = strings.IndexByte(format[i:], '%')
if ni < 0 {
ni = len(format)
} else {
ni += i
}
retval = append(retval, []byte(format[i:ni])...)
if ni+1 < len(format) {
c := format[ni+1]
if c == '%' {
retval = append(retval, '%')
} else {
if layoutCmd, ok := FormatChars[rune(c)]; ok {
retval = append(retval, []byte(t.Format(layoutCmd))...)
} else {
retval = append(retval, '%', c)
}
}
} else {
if ni < len(format) {
retval = append(retval, '%')
}
}
}
return string(retval)
}