Предпочитаемый метод обработки преобразований дат 2000 года?
-
20-08-2019 - |
Вопрос
Существует ли предпочтительный алгоритм преобразования двухзначного года в четырехзначный год?
У меня есть двухзначная дата рождения (вместе с месяцем и днем), которую я хочу преобразовать в C#. DateTime
.Очевидно, что даты рождения не могут быть в будущем, но существует ли в .NET возможность преобразования двухзначного года в четырехзначный?
Решение
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.Если эта вероятность, по вашему мнению, слишком высока, то я сомневаюсь, что есть хороший способ автоматизировать это, если вы также не сохраните их возраст.
редактировать:конечно, есть формула (зная алгоритмически, как работает календарь), которая снизит эту вероятность...но в конечном итоге вы все равно можете получить ошибочные результаты, если не сохраните их возраст.
редактировать 2:конечно, если у вас есть их возраст, то календарный алгоритм вам не нужен.