Qt 獲取當前時間

lusirking發表於2016-05-20

1、獲取帶日期的時間,使用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的說明
2、只需要時間,不需要日期,也可使用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的說明
3、使用標準的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 tm          daytime;
cur = time((time_t*)NULL);
time(&cur);       
/*時間轉換*/
daytime = *localtime(&cur);     
printf("%s",  asctime(&daytime));
輸出為“Wed Feb 13 15:46:11 2016”
4、使用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;
以上四種方法在QT程式中均可使用!

相關文章