Предпочитаемый метод обработки преобразований дат 2000 года?

StackOverflow https://stackoverflow.com/questions/1050225

Вопрос

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top