Предпочитаемый метод для обращения с датами 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: конечно, если у вас есть возраст, то вам не нужен алгоритм календаря.