Преобразовать год из двух цифр в год из четырех цифр

Как бы я преобразовал двузначный год, отформатированный таким образом, в четыре года:

02 -> 2002
87 -> 1987

так далее...

Что у меня так далеко:

char shortYr[3];
char longYr[5];
scanf("%2s", shortYr);
int shortYrAsInt = atoi(shortYr);

if (shortYrAsInt < 99)
    ;

Как мне конвертировать это? В Интернете я читал о преобразовании 4-значных цифр в 2-значные, что легко, но как быть с другим способом?

4 ответа

Решение
int longYear;
if (shortYrAsInt <= 15) { // this should be the number where you think it stops to be 20xx (like 15 for 2015; for every number after that it will be 19xx)
    longYear = shortYrAsInt + 2000;
} else {
    longYear = shortYrAsInt + 1900;
}

Я думаю, что-то вроде этого будет хорошо работать (написано в JS):

if(year >= 0 && year < 100) {
    const now = new Date();
    const fullYear = now.getFullYear();
    let shortYear = fullYear % 100;
    let m1 = fullYear - shortYear;
    let m2 = m1 - 100;

    let opt1 = year + m1;
    let opt2 = year + m2;

    year = Math.abs(fullYear - opt1) < Math.abs(fullYear - opt2) ? opt1 : opt2;
}

то есть он выберет тот, который ближе к текущему году, 19XX или 20XX.

На самом деле это не "конвертация", а "интерпретация", которую вы пытаетесь достичь.

  • Тебе понадобится atoi преобразовать строковое представление в целое число
  • Затем сделайте эвристику, чтобы добавить к вашему целому числу:
    • 2000 если 2 цифры находятся между 00 а также 14
    • или же 1900 иначе.

Немного запутано, но это сработало для меня (питон)

num = "99"
year = int(num) + (1-round(int(num)/100))*2000 + round(int(num)/100)*1900

Если вы хотите использовать только символ:

if (shortYrAsInt < 15) { // The number where it stops being 20xx
    sprintf(longYr, "20%s", shortYr);
} 
else {
    sprintf(longYr, "19%s", shortYr);
}
Другие вопросы по тегам