Qt读取本地系统时间的几种方式小结
作者:寒听雪落
一,使用Windows API函数GetLocalTime(精确到毫秒)
typedef struct _SYSTEMTIME //SYSTEMTIME结构体定义 { WORD wYear;//年 WORD wMonth;//月 WORD wDayOfWeek;//星期,0为星期日,1为星期一,2为星期二…… WORD wDay;//日 WORD wHour;//时 WORD wMinute;//分 WORD wSecond;//秒 WORD wMilliseconds;//毫秒 } SYSTEMTIME,*PSYSTEMTIME;
SYSTEMTIME sys; GetLocalTime( &sys ); printf("%4d/%2d/%2d %2d:%2d:%2d.%3d\n", sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute,sys.wSecond,sys.wMilliseconds); //输出为“2024/3/16 10:13:23.234”
二,使用C语言函数localtime
1,使用asctime()进行格式转换
/*得到系统时间*/ time_t cur; struct daytime; cur = time((time_t*)NULL); time(&cur); /*时间转换*/ daytime = *localtime(&cur); printf("%s", asctime(&daytime)); //输出为“Wed Feb 13 15:46:11 2016”
2,使用strftime()进行格式转换
time_t t = time( 0 ); char tmp[64]; strftime( tmp, sizeof(tmp), "%Y/%m/%d %X %A 本年第%j天 %z",localtime(&t) ); printf("%s\n",tmp); //输出为“2016/05/20 13:11:57 Friday 本年第141天 中国标准时间” 其中函数size_t strftime(char *strDest,size_t maxsize,const char *format,const struct tm *timeptr)
功能为根据format指向字符串中格式命令把timeptr中保存的时间信息放在strDest指向的字符串中,最多向strDest中存放maxsize个字符。该函数返回向strDest指向的字符串中放置的字符数。
format参数说明:
%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 每周的第几天,星期一为第一天 (值从1到7,星期一为1)
%U 第年的第几周,把星期日作为第一天(值从0到53)
%V 每年的第几周,使用基于周的年
%w 十进制表示的星期几(值从0到6,星期天为0)
%W 每年的第几周,把星期一做为第一天(值从0到53)
%x 标准的日期串
%X 标准的时间串
%y 不带世纪的十进制年份(值从0到99)
%Y 带世纪部分的十制年份
%z,%Z 时区名称,如果不能得到时区名称则返回空字符。
%% 百分号
三,使用QDateTime获取带日期的时间
QDateTime current_date_time =QDateTime::currentDateTime();
QString current_date =current_date_time.toString("yyyy.MM.dd hh:mm:ss.zzz ddd");
yyyy表示年;MM表示月;dd表示日; hh表示小时;mm表示分;ss表示秒;zzz表示毫秒;ddd表示周几
connect(&time,SIGNAL(timeout()),this,SLOT(onTimeOut())); time.start(1000); void MainWindow::onTimeOut() { // 获取系统当前时间 QDateTime dateTime = QDateTime::currentDateTime(); sdateTimer = dateTime.toString("yyyy-MM-dd HH:mm:ss.zzz"); ui->label->setText(sdateTimer); // 显示的内容 ui->lcdNumber->display(sdateTimer); }
四,使用QTime获取本地时间
QTime可以像QDateTime::toString那样直接输出固定格式的字符串。
QTime current_time =QTime::currentTime(); int hour = current_time.hour(); //当前的小时 int minute = current_time.minute(); //当前的分 int second = current_time.second(); //当前的秒 int msec = current_time.msec(); //当前的毫秒