Разбор месяца и даты из строки DateTime - PullRequest
2 голосов
/ 29 июня 2009

Допустим, у вас есть строки этого формата.

11 января, "111" 1 ноября "1101" 13 октября "1013" и т.д.

Так что в основном все, что вы хотите проанализировать и сохранить в двух переменных: дата и месяц.

Мне не нужен код для разбора, я легко могу это сделать. Мне просто интересно, если кто-то знает способ сделать это, используя что-то вроде DateTime.TryParse () или что-то похожее.

Приветствия

Ответы [ 2 ]

5 голосов
/ 29 июня 2009

Используя DateTime, это может быть что-то вроде этого

string value = "111";
if (value.Length < 4) value = "0" + value;
DateTime dt;
if (DateTime.TryParseExact(value, "MMdd", 
     CultureInfo.InvariantCulture, DateTimeStyles.None, out dt)) {
    int month = dt.Month;
    int day = dt.Day;
}

Но, если честно, вам лучше просто разобрать строку вручную. Если вы хотите, чтобы день и месяц были разделены на две отдельные переменные, вы просто вводите издержки (настолько малые, насколько это возможно) с ненужным DateTime.

int value = 111;
int month = value / 100;
int day = value % 100;

if (month > 12)
    throw new Exception("Invalid Month " + month.ToString());

if (day > DateTime.DaysInMonth(year, month))
    throw new Exception("Invalid Day " + day.ToString());
1 голос
/ 29 июня 2009

Вы можете сделать это, используя ParseExact или TryParseExact .

Не думаю, что ваш пример сработает, он отказывается анализировать 111 как 11 января, рассматривая его как 1 октября. Если вы придерживаетесь двух цифр для обеих частей даты, это должно быть чище.

DateTime parsedDate;
if (DateTime.TryParseExact("0111", "MMdd", System.Globalization.CultureInfo.CurrentCulture, System.Globalization.DateTimeStyles.None, out parsedDate))
{
    // do something with parsedDate.Month and parsedDate.Day
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...