C++如何获取当前系统时间及格式化输出
本文主要使用time()及strftime()函数实现c++获取系统时间。
C++系统和时间相关的函数基本上都是使用C语言提供的标准接口
在程序中获取系统时间是常见的操作,很多情况下使用系统提供的time函数即可获取。
time()是系统C语言的标准接口,通过mantime或者man2time可查看详细的使用方法。
includeinclude intmain() { time_ttt=time(NULL); tm*t=localtime(&tt); printf("%d-%02d-%02d%02d:%02d:%02d\n", t->tm_year+1900, t->tm_mon+1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec); }
将文件保存为timetest.cpp,在linux下使用g++命令编译:
g++timetest.cpp
成功会生成a.out,执行命令即可看到输出:
./a.out
这是最常用的方法,当然另外还有其它函数可使用,可参考以下函数,这里不在详述。
date(1),gettimeofday(2),ctime(3),ftime(3),time(7)
时间字符串处理
用上面的time函数获取时间后返回的是tm的结构体,通常我们需要转换为字符串的方式使用。
这时strftime可派上用场,这个函数常用来格式化时间和日期。
#include#include #include int main(intargc,char argv[]) { charoutstr[200]; time_tt; tmp; t=time(NULL); tmp=localtime(&t); if(tmp==NULL){ perror("localtime"); exit(EXIT_FAILURE); } if(strftime(outstr,sizeof(outstr),argv[1],tmp)==0){ fprintf(stderr,"strftimereturned0"); exit(EXIT_FAILURE); } printf("Resultstringis"%s"\n",outstr); exit(EXIT_SUCCESS); }/*main*/
使用方法同上编译,运行时出入时间格式:
$./a.out'%m' Resultstringis"11" $./a.out'%5m' Resultstringis"00011" $./a.out'%_5m' Resultstringis"11"
strftime支持多种日期时间格式,详细如下,需要注意大小写哦:
%a星期几的简写
%A星期几的全称
%b月分的简写
%B月份的全称
%c标准的日期的时间串
%C年份的后两位数字
%d十进制表示的每月的第几天
%D月/天/年
%e在两字符域中,十进制表示的每月的第几天
%F年-月-日
%g年份的后两位数字,使用基于周的年
%G年分,使用基于周的年
%h简写的月份名
%H24小时制的小时
%I12小时制的小时
%j十进制表示的每年的第几天
%m十进制表示的月份
%M十时制表示的分钟数
%n新行符
%p本地的AM或PM的等价显示
%r12小时的时间
%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时区名称,如果不能得到时区名称则返回空字符。
%%百分号
下面在看段代码c++获取当前系统时间并格式化输出
#include#include usingnamespacestd; stringgetTime() { time_ttimep; time(&timep); chartmp[64]; strftime(tmp,sizeof(tmp),"%Y-%m-%d%H:%M:%S",localtime(&timep)); returntmp; } intmain(){ stringtime=getTime(); cout<