Предпочтительный метод обработки конверсий даты Y2K?

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

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

0
задан Ian Boyd 26 июня '09 в 20:18
источник поделиться

3 ответов

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

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


Изменить: решение OP:

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);
}
2
ответ дан Mehrdad Afshari 26 июня '09 в 20:22
источник поделиться

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

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

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

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

1
ответ дан NotMe 26 июня '09 в 20:23
источник поделиться

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

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

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

0
ответ дан San Jacinto 26 июня '09 в 20:23
источник поделиться

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