Как вырезать часть строки в C# через Substring?
Есть строка, например дата "2026-06-18", и мне нужно достать из неё отдельно год, месяц, день. Слышал про Substring, но путаюсь в аргументах — там индекс и длина или два индекса? Постоянно получаю ArgumentOutOfRangeException.
2 ответа
Substring принимает начальный индекс и (опционально) количество символов — НЕ два индекса. Индексы с нуля.
string date = "2026-06-18";
string year = date.Substring(0, 4); // с позиции 0, 4 символа -> "2026"
string month = date.Substring(5, 2); // с позиции 5, 2 символа -> "06"
string day = date.Substring(8); // с позиции 8 и до конца -> "18"
Если передать один аргумент — берётся всё от индекса до конца строки.
Почему вы ловите ArgumentOutOfRangeException: это происходит, когда начало + длина выходит за пределы строки. Например, date.Substring(8, 5) упадёт, потому что после позиции 8 нет 5 символов.
Для вашей задачи с датой, кстати, проще Split:
string[] parts = date.Split('-');
string year = parts[0], month = parts[1], day = parts[2];
А в современном C# (8+) ещё есть удобный синтаксис диапазонов:
string year = date[..4]; // первые 4 символа
string day = date[8..]; // с 8-го до конца
Чтобы не падать с ArgumentOutOfRangeException, всегда проверяйте длину перед вызовом или используйте безопасный подход:
string s = "abc";
string part = s.Length >= 5 ? s.Substring(0, 5) : s;
И помните: первый аргумент Substring — это позиция (с нуля), второй — именно длина, а не конечный индекс. Эту вторую цифру путают чаще всего.