Windows下C C 獲取當前系統時間

2021-07-02 02:21:55 字數 3794 閱讀 8248

【原文】

寫軟體時經常要用到獲取系統時間顯示到狀態列,這裡在前人的基礎上總結了一下幾種方案。

time_t是定義在time.h中的乙個型別,表示乙個日曆時間,也就是從2023年1月1日0時0分0秒到此時的秒數,原型是:

typedef long time_t;        /* time value */

可以看出time_t其實是乙個長整型,由於長整型能表示的數值有限,因此它能表示的最遲時間是2023年1月18日19時14分07秒。

函式time可以獲取當前日曆時間時間,time的定義:

time_t time(time_t *)

time_t(typedef __int64  time_t )只是乙個長整型,不符合我們的使用習慣,需要轉換成本地時間,就要用到tm結構,time.h中結構tm的原型是:

[cpp]view plain

copy

struct

tm ;  

可以看出,這個機構定義了年、月、日、時、分、秒、星期、當年中的某一天、夏令時。可以用這個結構很方便的顯示時間。

用localtime獲取當前系統時間,該函式將乙個time_t時間轉換成tm結構表示的時間,函式原型:

struct tm * localtime(const time_t *)

使用gmtime函式獲取格林尼治時間,函式原型:

struct tm * gmtime(const time_t *)

輸出方式1:

[cpp]view plain

copy

#include 

#include 

using

namespace std;  

void dsptime(const

struct

tm *); //輸出時間。

int main(void)  

void dsptime(const

struct

tm * ptm)  

;  cout << ptm->tm_year+1900 << "年"

<< ptm->tm_mon+1 << "月"

<< ptm->tm_mday << "日 " ;  

cout << ptm->tm_hour << ":"

<< ptm->tm_min << ":"

<< ptm->tm_sec <<" " ;  

cout << " 星期"

<< ptm->tm_yday << "天 "

<< endl;  

}  

輸出方式2:

[cpp]view plain

copy

#include 

#include 

int main( void )     

c/c++在time.h中提供了乙個自定義時間格式的函式strftime,函式原型:

size_t strftime(char *strdest, size_t maxsize, const char *format, const struct tm *timeptr);

引數說明:

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 時區名稱,如果不能得到時區名稱則返回空字元。

%% 百分號

[cpp]view plain

copy

#include 

#include 

int main( void )     

優點:利用系統函式,還能修改系統時間

[cpp]view plain

copy

//此檔案必須是c++檔案

#include

#include

using

namespace std;  

void main()    

將當前時間折算為秒級,再通過相應的時間換算即可

[cpp]view plain

copy

//此檔案必須是c++檔案

#include

#include

using

namespace std;  

int main()    

使用mfc裡面的ctime類,更加方便

第一種:

[cpp]view plain

copy

cstring str; //獲取系統時間   

ctime tm; tm=ctime::getcurrenttime();     

str=tm.format("%y-%m-%d %h:%m:%s");  //主要是y m d,h m s中間的連線符自己定義

messagebox(str,null,mb_ok);  

第二種:

[cpp]view plain

copy

systemtime st;     

cstring strdate,strtime;     

getlocaltime(&st);     

strdate.format("%4d-%2d-%2d",st.wyear,st.wmonth,st.wday);     

strtime.format("%2d:%2d:%2d",st.whour,st.wminute,st.wsecond); 

注釋:

先 轉化為systemtime 再

參考:

Windows下C C 獲取當前系統時間

time t是定義在time.h中的乙個型別,表示乙個日曆時間,也就是從1970年1月1日0時0分0秒到此時的秒數,原型是 typedef long time t time value 可以看出time t其實是乙個長整型,由於長整型能表示的數值有限,因此它能表示的最遲時間是2038年1月18日19...

C C 獲取當前系統時間

方案 優點 僅使用c標準庫 缺點 只能精確到秒級 include include int main void size t strftime char strdest,size t maxsize,const char format,const struct tm timeptr 根據格式字串生成字...

C C 獲取當前路徑

獲取當前工作目錄是使用函式 getcwd。cwd指的是 current working directory 這樣就好記憶了。函式說明 函式原型 char getcwd char buffer,int len 引數 buffer是指將當前工作目錄的絕對路徑copy到buffer所指的記憶體空間,len...