#t6. 日期格式转换

日期格式转换

日期格式转换

题目描述

世界上不同国家有不同的写日期的习惯。比如美国人习惯写成“月-日-年”,而中国人习惯写成“年-月-日”。请你写个程序,自动把读入的美国格式的日期改写成中国习惯的日期。

输入格式

输入在一行中按照“mm-dd-yyyy”的格式给出月、日、年。题目保证给出的日期是1900年元旦至今合法的日期。

输出格式

在一行中按照“yyyy-mm-dd”的格式给出年、月、日。

样例输入

03-15-2024

样例输出

2024-03-15

数据范围

保证输入的日期合法,年份在[1900,2100][1900, 2100]之间。

提示

一、%02d:控制整数的最小宽度和前导零

%d 只保证「把数打出来」,不管占几位。想要固定宽度、不足补零,就用 %0Nd:

printf("%d\n",   3);   // 3
printf("%2d\n",  3);   //  3   宽度 2,不足补空格
printf("%02d\n", 3);   // 03   宽度 2,不足补 0
printf("%02d\n", 12);  // 12   已经够 2 位,不再补
printf("%03d\n", 7);   // 007

拆开看 %02d 的三部分:

  • % —— 占位符开始;
  • 0 —— 不足位数时用 0 填(不写 0 就填空格);
  • 2 —— 至少占 2 个字符宽;
  • d —— 按整数输出。

二、为什么日期题一定要用它

日期 2024-3-7 按常见格式要写成 2024-03-07。如果直接用 %d,月和日只有一位时不会补零,输出就变成 2024-3-7,格式不符。

三、常见错误

  • 写成 %2d 少了 0 → 补的是空格,看起来像多了空格。

  • 把宽度写成变量:%0nd 里的 n 必须是写死的数字,不能是变量。

  • 对小数用 %02d → 类型不匹配,输出乱码。小数要用 %.2f。

  • 输入是「月-日-年」,中间是减号:和上一章的逗号题一样,格式串里要把减号原样写出来。

  • 输出顺序变成「年-月-日」,但三个数还是原来的三个变量,只是打印顺序换了。

  • 月和日不足两位要补 0,用 %02d;年份是四位,用 %d 就够。

自查:拿样例 03-15-2024 → 2024-03-15 对照,重点看 3 月有没有补成 03。