У меня есть строка длиной от 1 до 8 символов. Мне нужно преобразовать их в день, месяц и год. Для недостающих частей я буду использовать текущую.
Код, который у меня сейчас есть, довольно большой и безобразный, и мне было интересно, есть ли у кого-нибудь более умная идея, как это сделать.
Мой текущий код указан ниже:
var day = DateTime.Now.Day;
var month = DateTime.Now.Month;
var year = DateTime.Now.Year;
switch (digits.Length)
{
case 1:
case 2:
day = int.Parse(digits.Substring(0));
break;
case 3:
case 4:
day = int.Parse(digits.Substring(0, 2));
month = int.Parse(digits.Substring(2));
break;
case 5:
case 6:
case 7:
case 8:
day = int.Parse(digits.Substring(0, 2));
month = int.Parse(digits.Substring(2, 2));
year = int.Parse(digits.Substring(4));
break;
default:
break;
}
Примечание: Я знаю, что это не учитывает культуру, но не должно:)
Я пытался сделать это так:
day = int.Parse(digits.Substring(0, 2));
if(digits.Length > 2)
month = int.Parse(digits.Substring(2, 2));
if(digits.Length > 4)
year = int.Parse(digits.Substring(4, 4));
Но он выдаст ArgumentOutOfRangeException
, если строка имеет длину 1, 3, 5, 6 или 7 цифр ... так что это не сработало так хорошо. Если бы только метод Substring просто взял бы столько букв, сколько мог, вместо того, чтобы завершиться сбоем, когда не было достаточно букв для «заполнения» подстроки ...
Можно ли использовать для этого регулярные выражения?