簡介
Qt獲取系統當前時間的四種方法(一般使用第一種或者第二種)
方法一:獲取帶日期的時間,使用QDateTime類
QDateTime current_date_time =QDateTime::currentDateTime(); QString current_date =current_date_time.toString("yyyy.MM.dd hh:mm:ss.zzz ddd");
//current_date字符串結果為"2016.05.20 12:17:01.445 周五"
其中時間的顯示格式可靈活配置,此處簡單說明本實例中用到的部分:
yyyy表示年;MM表示月;dd表示日; hh表示小時;mm表示分;ss表示秒;zzz表示毫秒;ddd表示周幾
注:詳細配置格式內容較多,有需要的請自行查看Qt Assistant中關於函數QString QDateTime::toString ( const QString & format ) const的說明
方法二:使用QTime類
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(); //當前的毫秒
當然QTime也可以像QDateTime::toString那樣直接輸出固定格式的字符串,使用方法與QDateTime::toString類似,
也可參考Qt Assistant中關於函數QString QTime::toString ( const QString & format ) const的說明
方法三:使用標准的C語言函數localtime(精確到秒)
注:需要包含time.h頭文件
1、使用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 時區名稱,如果不能得到時區名稱則返回空字符。 %% 百分號
2、使用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”
方法四:使用Windows API 函數GetLocalTime(精確到毫秒)
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); //輸出為“2016/5/16 10:13:23.234”
其中SYSTEMTIME結構體定義如下
typedef struct _SYSTEMTIME { WORD wYear;//年 WORD wMonth;//月 WORD wDayOfWeek;//星期,0為星期日,1為星期一,2為星期二…… WORD wDay;//日 WORD wHour;//時 WORD wMinute;//分 WORD wSecond;//秒 WORD wMilliseconds;//毫秒 } SYSTEMTIME,*PSYSTEMTIME;