5. ctime

概述

ctime是由C語言的time.h沿用到C++的,也沒什麼好說的,開始使用吧!

取得現在的時間

time_t time (time_t* timer);
這個函式會從 1970 年 1 月 1 日 00:00 UTC 起計算到使用者使用的現在,來看花使用:

#include <iostream> #include <ctime> using namespace std; int main(){ time_t a = time(NULL); cout << a << endl; return 0; }

從上述程式碼我們可以得到一個輸出,以我現在為例,我得到的輸出是1623735092,代表我從1970 年 1 月 1 日 00:00 UTC到現在的秒數,但我們要的不僅僅是秒數,我們要的是年月日時分秒,所以我們要使用另一個函式來達成這個目標,我們先去C++ reference看一下如果我們要達成目標該用哪個函式呢?我們可以在ctime裡看到我們可以使用此函式來達到這個目的,但又有另一個問題,就是我們該傳什麼參數進去呢?再去看一次C++ reference 時看到我們應該傳一個time_t的指標進去,
char* ctime (const time_t * timer);
在前面的char*就是一個string,只是在C語言是這個用法,那我們將一個time_t的指標傳入,看看會發生什麼事。

#include <iostream> #include <ctime> using namespace std; int main(){ time_t a = time(NULL); cout << a << endl;//output:1623746252 char *b = ctime(&a); cout << b << endl;//output:Tue Jun 15 16:37:32 2021 return 0; }

果然輸出我們要的結果,Tue Jun 15 16:37:32 2021。
但如果我們今天要的只有某一部分的時間,就是說我不要年月日時分秒全部輸出,我只要年月日的話怎麼辦?

#include <iostream> #include <ctime> using namespace std; int main(){ time_t t = time(NULL); struct tm * pt = localtime(&t); cout << pt->tm_year+1900 << "/" << pt->tm_mon + 1 << "/" << pt->tm_mday <<endl; return 0; }

這邊就比較難理解了,我們可以看到我們此處使用了一個結構,名叫tm,接著我們去看看C++ reference,可以看到我們要宣告的名稱需要是一個指標,
struct tm * localtime (const time_t * timer);
且在localtime()裡也需要一個time_t的指標,所以我才會這樣做宣告,接著要把年月日輸出,由於我們tm_year是結構裡的成員,所以我們這邊需利用箭號運算子,來求值,故輸出為2021/6/15。