荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: 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软件 网络书店