Предпочитаемый метод для обращения с датами 2000 года?

Есть ли предпочтительный алгоритм для преобразования двухзначного года в четырехзначный год?

У меня есть двузначная дата рождения (вместе с месяцем и днем), которую я хочу преобразовать в C# DateTime, Очевидно, что даты рождения не могут быть в будущем, но есть ли в.NET средство для преобразования двухзначного года в четырехзначный год?

3 ответа

Решение
static int GetFourDigitYear(int year, int maxYear) 
{
    System.Globalization.GregorianCalendar cal = 
          new System.Globalization.GregorianCalendar();
    cal.TwoDigitYearMax = maxYear;
    return cal.ToFourDigitYear(year);
}

maxYear должен быть текущий четырехзначный год.


Изменить: решение ОП:

static int GetFourDigitYear(int year, int pivot) 
{
    System.Globalization.GregorianCalendar cal = 
          new System.Globalization.GregorianCalendar();
    cal.TwoDigitYearMax = new DateTime.Year + (100-pivot);
    return cal.ToFourDigitYear(year);
}

Различные системы используют разные даты останова в зависимости от требований к данным.

В вашем случае наиболее вероятно предположить, что годы с 00 по 09 - 2000+, тогда как любые другие значения (от 10 до 99) - 1900+

Вопрос, который вы должны задать себе: какова вероятность того, что в вашей системе в настоящее время есть записи о людях старше 100 лет?

Вы должны сделать этот расчет ровно один раз, сохранить его, и весь ваш код будет идти вперед, используя 4-х значные годы.

Мне бы пришло в голову, что если бы человек был потенциально рожден 3 января 2007 года, то вероятность того, что он родился в тот же день недели 100 лет назад, будет чуть меньше 1/7. Если эта вероятность слишком велика для вас, я сомневаюсь, что есть хороший способ автоматизировать это, если вы не сохраните их возраст.

edit: конечно, есть формула (зная алгоритмически, как работает календарь), которая снизит эту вероятность... но, в конце концов, у вас все еще могут быть некоторые ошибочные результаты, если вы не сохраните их возраст.

изменить 2: конечно, если у вас есть возраст, то вам не нужен алгоритм календаря.

Другие вопросы по тегам