in libbeat/common/dtfmt/fmt.go [147:251]
func parsePatternTo(b *builder, pattern string) error {
for i := 0; i < len(pattern); {
tok, tokText, err := parseToken(pattern, &i)
if err != nil {
return err
}
tokLen := len(tokText)
switch tok {
case 'x': // weekyear (year)
if tokLen == 2 {
b.twoDigitWeekYear()
} else {
b.weekyear(tokLen, 4)
}
case 'y', 'Y': // year and year of era (year) == 'y'
if tokLen == 2 {
b.twoDigitYear()
} else {
b.year(tokLen, 4)
}
case 'w': // week of weekyear (num)
b.weekOfWeekyear(tokLen)
case 'e': // day of week (num)
b.dayOfWeek(tokLen)
case 'E': // day of week (text)
if tokLen >= 4 {
b.dayOfWeekText()
} else {
b.dayOfWeekShortText()
}
case 'D': // day of year (number)
b.dayOfYear(tokLen)
case 'M': // month of year (month)
if tokLen >= 3 {
if tokLen >= 4 {
b.monthOfYearText()
} else {
b.monthOfYearShortText()
}
} else {
b.monthOfYear(tokLen)
}
case 'd': //day of month (number)
b.dayOfMonth(tokLen)
case 'a': // half of day (text) 'AM/PM'
b.halfdayOfDayText()
case 'K': // hour of half day (number) (0 - 11)
b.hourOfHalfday(tokLen)
case 'h': // clock hour of half day (number) (1 - 12)
b.clockhourOfHalfday(tokLen)
case 'H': // hour of day (number) (0 - 23)
b.hourOfDay(tokLen)
case 'k': // clock hour of half day (number) (1 - 24)
b.clockhourOfDay(tokLen)
case 'm': // minute of hour
b.minuteOfHour(tokLen)
case 's': // second of minute
b.secondOfMinute(tokLen)
case 'S': // fraction of second
b.nanoOfSecond(tokLen)
case 'f': // faction of second (without zeros)
b.fractNanoOfSecond(tokLen)
case 'n': // nano second
// if timestamp layout use `n`, it always return 9 digits nanoseconds.
if tokLen != 9 {
tokLen = 9
}
b.nanoOfSecond(tokLen)
case 'z': // timezone offset
b.timeZoneOffsetText()
case '\'': // literal
if tokLen == 1 {
b.appendRune(rune(tokText[0]))
} else {
b.appendLiteral(tokText)
}
default:
return fmt.Errorf("unsupport format '%c'", tok)
}
}
return nil
}