func parsePatternTo()

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
}