【问题标题】:Convert 2 digit year to 4 digit year将 2 位数年份转换为 4 位数年份
【发布时间】:2014-10-13 13:48:55
【问题描述】:

如何将这样格式的 2 位数年份转换为四年:

02 -> 2002
87 -> 1987

等等……

到目前为止

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

if (shortYrAsInt < 99)
    ;

如何转换它?在网上,我读到将4位转换为2位,这很容易,但是另一种方法呢?

【问题讨论】:

  • 20xx 或 19xx 的限制是多少?例如 50 的输出是什么? 1950 年或 2050 年

标签: c 2-digit-year


【解决方案1】:
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;
}

【讨论】:

    【解决方案2】:

    我认为这样的东西会很好用(用 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。

    【讨论】:

      【解决方案3】:

      这并不是真正的“转换”,而是您想要实现的更多“解释”。

      • 您需要atoi 将字符串表示形式转换为整数
      • 然后进行启发式添加到您的整数:
        • 2000 如果 2 位数字介于 0014 之间
        • 1900 否则。

      【讨论】:

        【解决方案4】:

        如果你只想使用 char :

        if (shortYrAsInt < 15) { // The number where it stops being 20xx
            sprintf(longYr, "20%s", shortYr);
        } 
        else {
            sprintf(longYr, "19%s", shortYr);
        }
        

        【讨论】:

          【解决方案5】:

          有点复杂,但这对我有用(python)

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-01-02
            • 1970-01-01
            • 2010-12-11
            • 2019-06-18
            • 2021-12-14
            • 1970-01-01
            • 2017-06-24
            相关资源
            最近更新 更多