我如何将这样格式的 2 位数年份转换为四年:
02 -> 2002
87 -> 1987
ETC...
到目前为止我所拥有的:
char shortYr[3];
char longYr[5];
scanf("%2s", shortYr);
int shortYrAsInt = atoi(shortYr);
if (shortYrAsInt < 99)
;
我该如何转换它?在互联网上,我读到将 4 位转换为 2 位,这很容易,但是另一种方式呢?
我如何将这样格式的 2 位数年份转换为四年:
02 -> 2002
87 -> 1987
ETC...
到目前为止我所拥有的:
char shortYr[3];
char longYr[5];
scanf("%2s", shortYr);
int shortYrAsInt = atoi(shortYr);
if (shortYrAsInt < 99)
;
我该如何转换它?在互联网上,我读到将 4 位转换为 2 位,这很容易,但是另一种方式呢?
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
其他。如果您只想使用 char :
if (shortYrAsInt < 15) { // The number where it stops being 20xx
sprintf(longYr, "20%s", shortYr);
}
else {
sprintf(longYr, "19%s", shortYr);
}
有点令人费解,但这对我有用(python)
num = "99"
year = int(num) + (1-round(int(num)/100))*2000 + round(int(num)/100)*1900