Предпочитаемый метод для обращения с датами 2000 года? - PullRequest
0 голосов
/ 26 июня 2009

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

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

Ответы [ 3 ]

2 голосов
/ 26 июня 2009
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);
}
1 голос
/ 26 июня 2009

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

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

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

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

0 голосов
/ 26 июня 2009

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

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

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

...