Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2358865
  • 博文数量: 527
  • 博客积分: 10343
  • 博客等级: 上将
  • 技术积分: 5565
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-26 23:05
文章分类

全部博文(527)

文章存档

2014年(4)

2012年(13)

2011年(19)

2010年(91)

2009年(136)

2008年(142)

2007年(80)

2006年(29)

2005年(13)

我的朋友

分类: WINDOWS

2007-11-24 10:35:00

先看两个 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!
阅读(727) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~