#include<time.h>
1.获得日历时间
- time_t
实际上是长整型,从一个时间点(一般是1970年1月1日0时0分0秒)到此时的秒数
time_t的值由函数time()获得
time_t time(time_t* timer);
eg:time_t t=time( NULL);
2.获得日期和时间
- struct tm
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;不了解情况时,tm_isdst()为负。*/
};
struct tm的值由函数localtime( )和gmtime( )获得
struct tm * localtime(const time_t* timer);//将日历时间转化为本地时间
struct tm * gmtime(const time_t*timer); //将日历时间转化为格林尼治标准时间(Greenwich Mean Time)</span>
eg:struct tm *tm=localtime(&t);
eg:struct tm *tm=gmtime(&t);
#include<stdio.h>
#include<time.h>
int main()
{
time_t t;
struct tm *localtm;
struct tm *gmtm;
t=time(NULL);
localtm=localtime(&t);//参数为指向time_t的指针,返回值为指向tm的指针localtm
gmtm=gmtime(&t);//参数为指向time_t的指针,返回值为指向tm的指针gmtm</span>
printf("The calendar time is:%ld\n",t);
printf("The Local time is:%d-%d-%d %d:%d:%d\n",1900+localtm->tm_year,localtm->tm_mon,localtm->tm_mday,localtm->tm_hour,localtm->tm_min,localtm->tm_sec);
printf("The Greenwich Mean time is:%d-%d-%d %d:%d:%d\n",1900+gmtm->tm_year,gmtm->tm_mon,gmtm->tm_mday,gmtm->tm_hour,gmtm->tm_min,gmtm->tm_sec);
return 0;
}
3.固定时间格式
char * asctime(const struct tm * timeptr);//将日期时间转化为固定时间格式
char * ctime(const time_t *timer);//将日历时间转化为固定时间格式
返回的日期格式为:
星期几 月份 日期 时:分:秒 年\n\0
例如:Wed Jan 02 02:03:55 2014\n\0
例如:Wed Jan 02 02:03:55 2014\n\0
其中,\n是一个换行符,\0是一个空字符,表示字符串结束。
#include<stdio.h>
#include<time.h>
int main()
{
time_t t;
struct tm *localtm;
t=time(NULL);
printf("calendar time:%ld\n",t);
printf("ctime:%s\n",ctime(&t));
localtm=localtime(&t);
printf("The Local time is:%d-%d-%d %d:%d:%d\n",1900+localtm->tm_year,localtm->tm_mon,localtm->tm_mday,localtm->tm_hour,localtm->tm_min,localtm->tm_sec);
printf("astime:%s\n",asctime(localtm));
return 0;
}
4.自定义时间格式
strftime---string format time
size_t strftime(
char *strDest,
size_t maxsize,
const char *format,
const struct tm *timeptr
);
%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<stdio.h>
#include<time.h>
int main()
{
time_t t;
struct tm *localtm;
char date[100];
t=time(NULL);
printf("ctime:%s\n",ctime(&t));
localtm=localtime(&t);
strftime(date,100,"Current time:%D %T",localtm);
printf("%s\n",date);
return 0;
}