【原文】
寫軟體時經常要用到獲取系統時間顯示到狀態列,這裡在前人的基礎上總結了一下幾種方案。
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...