Max Coding blog

ctime

2021/06/24

ctime

概述

ctime是由C語言的time.h沿用到C++的,也沒什麼好說的,開始使用吧! ## 取得現在的時間 time_t time (time_t* timer); 這個函式會從 1970 年 1 月 1 日 00:00 UTC 起計算到使用者使用的現在,來看花使用:

1
2
3
4
5
6
7
8
9
#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的指標傳入,看看會發生什麼事。
1
2
3
4
5
6
7
8
9
10
11
12
#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。 但如果我們今天要的只有某一部分的時間,就是說我不要年月日時分秒全部輸出,我只要年月日的話怎麼辦?
1
2
3
4
5
6
7
8
9
10
#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。

by 中和高中 吳振榮
CATALOG
  1. 1. ctime
    1. 1.1. 概述
      1. 1.1.0.0.1. by 中和高中 吳振榮