问C 语言有 Y2K 问题吗?
答没有,尽管写得不好的 C 程序可能会有问题。
该tm_year字段struct tm存储的是年份减去 1900 的值;因此,该字段在 2000 年时包含 100。正确使用tm_year(在转换为或从人类可读的 4 位数字年份表示进行转换时加上或减去 1900)的代码在千禧年之交没有问题。任何使用tm_year不当的代码,例如将其直接用作人类可读的 2 位数字年份,或使用如下代码从 4 位数字年份设置它
tm.tm_year = yyyy % 100; /* WRONG */或使用如下代码将其打印为声称可读的 4 位数字年份
printf("19%d", tm.tm_year); /* WRONG */确实会遇到严重的 Y2K 问题。另请参阅问题 20.32。
(Y2K 问题现在大部分是历史遗留问题了;我们剩下要做的就是修复到 2038 年的所有 32 位time_t问题……)
参考:K&R2 B10 节 第 255 页
ISO 7.12.1 节
H&S 18.4 节 第 401 页