荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: bakey (猪朋狗友), 信区: Program
标  题: c++<time.h>使用zz
发信站: 荔园晨风BBS站 (Sun Apr 30 11:54:52 2006), 站内

先贴函数声明吧:

time_t time(time_t * timer);

struct tm * gmtime(const time_t *timer);
struct tm * localtime(const time_t * timer);

size_t strftime(
   char *strDest,
   size_t maxsize,
   const char *format,
   const struct tm *timeptr
);
char * asctime(const struct tm * timeptr);
char * ctime(const time_t *timer);

double difftime(time_t time1, time_t time0);
time_t mktime(struct tm * timeptr);

struct tm
{
        int tm_sec;     /* 秒 – 取值区间为[0,59] */
        int tm_min;     /* 分 - 取值区间为[0,59] */
        int tm_hour;    /* 时 - 取值区间为[0,23] */
        int tm_mday;    /* 一个月中的日期 - 取值区间为[1,31] */
        int tm_mon;     /* 月份(从一月开始,0代表一月) - 取值区间为[0,11] */
        int tm_year;    /* 年份,其值等于实际年份减去1900 */
        int tm_wday;    /* 星期 – 取值区间为[0,6],其中0代表星期天 1代表星期
                           一,以此类推 */
        int tm_yday;    /* 从每年的1月1日开始的天数 – 取值区间为[0,365],其中
                           0代表1月1日,1代表1月2日,以此类推 */
        int tm_isdst;   /* 夏令时标识符,实行夏令时的时候,tm_isdst为正。不实
                           行夏令时的进候,tm_isdst为0;不了解情况时m_isdst()
                           为负。*/
};


按常用程度说:

第一个就是time()了,该函数返回的是从1970年1月1日0时0分0秒到现在的秒数,唯一反
例是VC7.0从1899年12月31日0时0分0秒。如果直接使用该函数的话,例如这样计算天数
time(NULL)/86400,必须注意到结果是格林威治时间,和东8区相差8小时的,这个错误
刚刚就犯了@_@
不过time_t实际上是long,所以有一定的局限性,只能算到2038年,不知道到2038年会不
会出现第二个Y2K了,呵呵。有的编译器也注意到这个问题,会提供time64_t这些类型和函
数。


第二个就是localtime(),把time()的结果转换为本地时间,example:
struct tm *local;
time_t t = time(NULL);
local = localtime(&t);
gmtime()则转换为格林威治时间。


转换自定义格式的strftime(),格式命令例子如下:
%a    Wed
%A    Wednesday
%b    Oct
%B    October
%c    Wed Oct 07 13:24:27 1992
%d    07    (day of month [01-31])
%D    月/天/年
%e    在两字符域中,十进制表示的每月的第几天
%F    年-月-日
%g    年份的后两位数字,使用基于周的年
%G    年分,使用基于周的年
%h    简写的月份名
%H    13    (hour in [00-23])
%I    01    (hour in [01-12])
%j    281   (day of year [001-366])
%m    10    (month [01-12])
%M    24    (minute [00-59])
%n    新行符
%p    PM
%r    12小时的时间
%R    显示小时和分钟:hh:mm
%S    27    (second [00-59] )
%t    水平制表符
%T    显示时分秒:hh:mm:ss
%u    每周的第几天,星期一为第一天 (值从0到6,星期一为0)
%U    40    (Sunday week of year [00-52])
%V    每年的第几周,使用基于周的年
%w    3     (day of week [0-6])
%W    40    (Monday week of year [00-52])
%x    Wed Oct 7, 1992
%X    13:24:27
%y    92
%Y    1992
%z,%Z 时区名称,如果不能得到时区名称则返回空字符。

example:
char buf[128];
strftime(buf, sizeof(buf),"%a %b %d %X %Y", time(NULL));
//buf ="Sat Apr 29 01:03:55 2006";

asctime()和ctime()是固定格式的,例如上例的buf,结果和ctime()一样


difftime()则是计算两个时间相差多少秒
mktime()是把日期转换为time_t



ps.  其实我写这篇文章的目的是不想每次strftime()的时候都google一下 ^_^
ps2. 有什么错误欢迎大家指出。

--
                      ╭ ﹌╮╭ ∽╮ 「老婆,天亮啦!」
                      (o'.'o)(o-.-o)
                      (~﹊︸ ̄︸ ̄︸)「懶蟲起床,懒喔!」
                      ( ◆ ◆ ◆ ◆ )
                      ( ◆ ◆ ◆ ◆ )「老公,再睡會嘛!」
                      ( ◆ ◆ ◆ ◆ )


※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.111.149]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店