package date_parser import ( "fmt" "strconv" "strings" "time" ) var ( ruMonths = map[string]time.Month{ "января": time.January, "февраля": time.February, "марта": time.March, "апреля": time.April, "мая": time.May, "июня": time.June, "июля": time.July, "августа": time.August, "сентября": time.September, "октября": time.October, "ноября": time.November, "декабря": time.December, } ) type parser struct{} func NewDateParser() IDateParser { return &parser{} } func (p *parser) Parse(date string) (time.Time, error) { parts := strings.Fields(date) if len(parts) < 2 { return time.Time{}, fmt.Errorf("Неверный формат даты, ожидалось 'День Месяц', получено: '%s'", date) } day, err := strconv.Atoi(parts[0]) if err != nil { return time.Time{}, fmt.Errorf("Не удалось получить день: %v", err) } monthStr := strings.ToLower(parts[1]) month, ok := ruMonths[monthStr] if !ok { return time.Time{}, fmt.Errorf("Неизвестный месяц: %s", monthStr) } year := time.Now().Year() return time.Date(year, month, day, 0, 0, 0, 0, time.Local), nil }