Каков наилучший способ разбить Int на год? - PullRequest
0 голосов
/ 01 августа 2010

У меня есть текстовое поле, в котором пользователи могут ввести год "YY", и я анализирую его, используя:

int year;
if (int.TryParse(txtYear.Text, out year))
{
    args.Year = year;
}

Проблема в том, что TryParse преобразует '07' в '7', и мой метод предполагает, что год будет в формате YYYY (например, ввод "07" должен быть "2007"). Каков наилучший способ сделать это преобразование?

Ответы [ 3 ]

5 голосов
/ 01 августа 2010
DateTime date;
if (DateTime.TryParseExact("07", "yy", CultureInfo.InvariantCulture, DateTimeStyles.None, out date))
{
    Console.WriteLine(date.Year);
}

Как предложил @Mark, обратите внимание на проблему 2K.

Я бы просто попросил пользователей ввести год в формате ГГГГ.

4 голосов
/ 01 августа 2010

Лучший способ - попросить пользователя ввести все четыре цифры.Одной из причин проблемы 2K были устаревшие системы, которые предполагали, что 2 цифр всегда будет достаточно.

Если у вас есть , то просто добавьте 2000 к своему результату.

int year;
if (int.TryParse(txtYear.Text, out year))
{
    args.Year = year + 2000;
}

Возможно, вы захотите добавить 1900 вместо 2000 для достаточно больших вводов («99» -> 1999, «00» -> 2000) в зависимости от того, насколько вероятно, что ваши пользователи ожидали 2099, когда они вошли »99" .

0 голосов
/ 01 августа 2010
int year;
if (int.TryParse(txtYear.Text, out year))
{
    args.Year = DateTime.Now.Year - (DateTime.Now.Year%100) + year;
}
...