1.概念
2. 计时
3.与日期和时间相关的数据结构
在标准C/C++中,我们可通过tm结构来获得日期和时间,tm结构在time.h中的定义如下:
#ifndef _TM_DEFINED
struct tm {
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
};
#define _TM_DEFINED
#endif
4.与日期和时间相关的函数及应用
4.1 获得日历时间
如果你已经声明了参数timer,你可以从参数timer返回现在的日历时间,同时也可以通过返回值返回现在的日历时间,即从一个时间点(例如:1970 年1月1日0时0分0秒)到现在此时的秒数。如果参数为空(NULL),函数将只通过返回值返回现在的日历时间,比如下面这个例子用来显示当前的日历时间:
#include <iostream.h>
#include <time.h>
void main()
{
time_t p;
time(&p);
}
#include <iostream.h>
#include <time.h>
void main()
{
lt=time(NULL);
}
运行结果是:
the calendar time now is:1257837686
4.2 获得日期和时间
struct tm * gmtime(const time_t *timer);
struct tm * localtime(const time_t * timer);
示例:
#include "time.h"
#include "iostream.h"
int main(void)
{
struct tm *local;
time_t t;
t=time(NULL);
local=localtime(&t);
cout<<"Local hour is:"<<local->tm_hour<<endl;
local=gmtime(&t);
cout<<"GM hour is:"<<local->tm_hour<<endl;
return 0;
}
Local hour is: 15
GM hour is: 7
4.3 固定的时间格式
#include "time.h"
#include "iostream.h"
void main()
{
struct tm *ptr;
time_t lt;
lt =time(0);//获取日历时间,返回time_t类型
ptr=gmtime(<);//返回tm结构体
cout<<asctime(ptr);//形参为tm结构体
cout<<ctime(<);//time_t类型
}
输出结果为:
Tue Nov 10 11:40:23 2009//GM时间
Tue Nov 10 19:40:23 2009//本地时间
4.4 自定义时间格式
格式命令如下,它们是区分大小写的。
%a 星期几的简写
%A 星期几的全称
%b 月分的简写
%B 月份的全称
%c 标准的日期的时间串
%C 年份的后两位数字
%d 十进制表示的每月的第几天
%D 月/天/年
%e 在两字符域中,十进制表示的每月的第几天
%F 年-月-日
%g 年份的后两位数字,使用基于周的年
%G 年分,使用基于周的年
%h 简写的月份名
%H 24小时制的小时
%I 12小时制的小时
%j 十进制表示的每年的第几天
%m 十进制表示的月份
%M 十时制表示的分钟数
%n 新行符
%p 本地的AM或PM的等价显示
%r 12小时的时间
%R 显示小时和分钟:hh:mm
%S 十进制的秒数
%t 水平制表符
%T 显示时分秒:hh:mm:ss
%u 每周的第几天,星期一为第一天 (值从0到6,星期一为0)
%U 第年的第几周,把星期日做为第一天(值从0到53)
%V 每年的第几周,使用基于周的年
%w 十进制表示的星期几(值从0到6,星期天为0)
%W 每年的第几周,把星期一做为第一天(值从0到53)
%x 标准的日期串
%X 标准的时间串
%y 不带世纪的十进制年份(值从0到99)
%Y 带世纪部分的十进制年份
%z,%Z 时区名称,如果不能得到时区名称则返回空字符。
%% 百分号
#include<time.h>
#include<iostream.h>
void main()
{
struct tm *ptr;
time_t lt;
char s[100];//用于存放指定格式的时间信息
lt=time(NULL);//获取日历时间,返回time_t类型
ptr=localtime(<);//返回tm结构体
strftime(s,100,"It is now %H",ptr);
cout<<s<<endl;
}
输出结果:
It is now 19
完整的时间输出:
#include<time.h>
#include<iostream.h>
void main()
{
struct tm *ptr;
time_t lt;
char s[100];//用于存放指定格式的时间信息
lt=time(NULL);//获取日历时间,返回time_t类型
ptr=localtime(<);//返回tm结构体
strftime(s,100, "Now is %X,%A, day %d of %B in the year %Y.\n",ptr);
cout<<s;
}
输出结果:
Now is 20:12:58,Tuesday,day 10 of November in the year 2009.
4.5 计算持续时间的长度
double difftime(time_t time1, time_t time0);
#include<time.h>
#include<stdlib.h>
#include<iostream.h>
void main()
{
time_t start,end;
start=time(NULL);//获取日历时间,返回time_t类型
system("pause");
cout<<"The pause used "<<difftime(end,start)<<" seconds.\n";
}
输出结果:
请按任意键继续. . .
The pause used 8 seconds.
4.6 分解时间转化为日历时间
#include<time.h>
#include<stdlib.h>
#include<iostream.h>
void main()
{
struct tm t;
time_t t_of_day;
t.tm_year=1997-1900;
t.tm_mon=6;
t.tm_mday=1;
t.tm_hour=0;
t.tm_min=0;
t.tm_sec=1;
t.tm_isdst=0;
t_of_day=mktime(&t);
cout<<ctime(&t_of_day);
}
运行结果:
Tue Jul 01 00:00:01 1997
5.总结
得到挂钟时间
得到时间差
将tm结构化为日历时间
得到日历时间
得到固定格式的时间字符串
得到固定格式的时间字符串
将时间保存在tm结构中
将时间保存在tm结构中
得到自定义格式的时间