Преобразовать строку c # только с годом (иногда) в дату и время - PullRequest
0 голосов
/ 21 марта 2019

Программа должна найти самого младшего (или самого старого) человека в списке. День рождения на самом деле string. Я конвертировал даты, используя Convert.ToDateTime(), который работает нормально. Однако в некоторых случаях вводом является просто year, без day и month, например. "1945". Преобразователь не работает.

Мои вопросы:

1) какую проверку можно добавить, чтобы предотвратить такой сбой во время выполнения?

2) Как я могу преобразовать его в дату, не переопределяя строки, включающие day и month? код:

DateTime curr_bday = Convert.ToDateTime(p.Birthday);

вот полная процедура:

public string the_youngest(Persons _p2)
{
    DateTime youngAge = Convert.ToDateTime("01/01/1005");

    DateTime curr_bday;
    string to_ret = "";

    foreach (var p in _p2.persons)
    {
        curr_bday = Convert.ToDateTime(p.Birthday);
        if (curr_bday < youngAge)
        {
            youngAge = curr_bday;
            to_ret = p.Name + " : " + p.Birthday;
        } 
    }
    return (to_ret);
} 

Ответы [ 3 ]

1 голос
/ 21 марта 2019

Использование TryParse - лучший выбор:

DateTime bDay;
if (int.TryParse(dateString, out var birthYear))
{
    dateString = new DateTime(birthYear, 7, 4); //born on the 4th of July
}
else if (!DateTime.TryParse( dateString, out bDay))
{
    //let the user know there's a problem
}
0 голосов
/ 21 марта 2019

Изучите функцию TryParse. он работает с датами, целыми числами и десятичными числами.

DateTime birthdate;
if(DateTime.TryParse(p.Birthday, out birthdate))
{
  //full date here successfully converted
  //continue
}
else
{
   birthdate = new DateTime(Int32.Parse(p.Birthday), 1, 1); //1 Jan by default
}
0 голосов
/ 21 марта 2019

Если предположить, что только два возможных формата: строка {year} и {valid datetime}, вы можете сделать

DateTime d;
if (p.Birthday.Length <= 4)
{
     int year = int.Parse(p.Birthday);
     d = new DateTime(year, 1, 1);
}
else
{
     d = DateTime.Parse(p.Birthday)
}

Это будет работать еще 8000 лет. Однако, если есть другие особые случаи, то вам нужно обрабатывать их отдельно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...