73 lines
2.1 KiB
Go
73 lines
2.1 KiB
Go
// go implementation of strftime
|
|
package strftime
|
|
|
|
import (
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
// taken from time/format.go
|
|
var conversion = map[rune]string{
|
|
/*stdLongMonth */ 'B': "January",
|
|
/*stdMonth */ 'b': "Jan",
|
|
// stdNumMonth */ 'm': "1",
|
|
/*stdZeroMonth */ 'm': "01",
|
|
/*stdLongWeekDay */ 'A': "Monday",
|
|
/*stdWeekDay */ 'a': "Mon",
|
|
// stdDay */ 'd': "2",
|
|
// stdUnderDay */ 'd': "_2",
|
|
/*stdZeroDay */ 'd': "02",
|
|
/*stdHour */ 'H': "15",
|
|
// stdHour12 */ 'I': "3",
|
|
/*stdZeroHour12 */ 'I': "03",
|
|
// stdMinute */ 'M': "4",
|
|
/*stdZeroMinute */ 'M': "04",
|
|
// stdSecond */ 'S': "5",
|
|
/*stdZeroSecond */ 'S': "05",
|
|
/*stdLongYear */ 'Y': "2006",
|
|
/*stdYear */ 'y': "06",
|
|
/*stdPM */ 'p': "PM",
|
|
// stdpm */ 'p': "pm",
|
|
/*stdTZ */ 'Z': "MST",
|
|
// stdISO8601TZ */ 'z': "Z0700", // prints Z for UTC
|
|
// stdISO8601ColonTZ */ 'z': "Z07:00", // prints Z for UTC
|
|
/*stdNumTZ */ 'z': "-0700", // always numeric
|
|
// stdNumShortTZ */ 'b': "-07", // always numeric
|
|
// stdNumColonTZ */ 'b': "-07:00", // always numeric
|
|
/* nonStdMilli */ 'L': ".000",
|
|
}
|
|
|
|
// This is an alternative to time.Format because no one knows
|
|
// what date 040305 is supposed to create when used as a 'layout' string
|
|
// this takes standard strftime format options. For a complete list
|
|
// of format options see http://strftime.org/
|
|
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 := conversion[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)
|
|
}
|