先看两个 2007年11月24日的两个网页, 一个是北理工的, 一个是清华大学的.
网站上自动显示当前日期, 把 2007 年弄成莫名其妙的 107年的, 绝不在这两个少数.
就搞不明白, 那些建设大学网站的人, 写程序的人, 堂堂的名校计算系的人, 容忍这样的低级错误这么着丢人现眼. 我关注清华大学网站上这个107年的问题不是一天两天, 很多网页上都是如此. 很长时间来一直如此.
这事的根源在于写程序的人不假思索认为表示时间的一个字段, 如果类型是int, 如果变量名是year, 它当然应该是2007 这样的数值.
还是因为可恶的千年虫, 它被过分夸大, 并没有所谓爆发, 但的的确确跟这问题有关.
#include <stdio.h>
#include <time.h>
int main()
{
time_t t = time(NULL);
struct tm * cur_time = localtime(&t);
printf("year:%d, month:%d, day: %d, hour: %d, min: %d, sec: %d\n",
cur_time->tm_year ,
cur_time->tm_mon + 1,
cur_time->tm_mday,
cur_time->tm_hour,
cur_time->tm_min,
cur_time->tm_sec);
char time_str[200];
strftime(time_str, sizeof(time_str),
"%%y: Year, last two digits (00-99) = %y\n"
"%%Y: Year = %Y\n", cur_time );
puts( time_str );
}
|
注意它的输出:
前者是107年, 后面有个07.
C库中的 localtime之后的 struct tm中, tm_year 的值是当前年份减去
的. 而strftime的 %y只是最后两位数字.
不管你用什么JSP, PHP, Perl, javascript什么样的技术, 它们无一例外地与具有C的血统, 库函数实现好听点说是重用难听点说是偷懒地用了C, 抑或者, 为了与既成的错误事实兼容.
不管怎样, 想显示年份信息时, 记得这个107!
阅读(979) | 评论(0) | 转发(0) |