目錄
- 1.
asctime()
- 2.
ctime()
- 3. 區別
- 3.1 示例對比
- 4. 總結
在C++中,asctime()
和 ctime()
都是用於將時間轉換為可讀字串的函式,但它們有一些細微的區別。
1. asctime()
作用:
asctime()
函式將 struct tm
型別的時間結構轉換為字串。這個函式通常與 localtime()
或 gmtime()
配合使用,將分解後的時間結構轉化為字串形式。
函式原型:
char *asctime(const struct tm *timeptr);
-
引數:
timeptr
:指向tm
結構的指標,表示要轉換的時間。
-
返回值:
- 返回一個指向靜態記憶體中字串的指標,格式為:
Www Mmm dd hh:mm:ss yyyy\n
,例如:Sat Aug 25 14:32:00 2024\n
。
- 返回一個指向靜態記憶體中字串的指標,格式為:
注意事項:
- 返回的字串儲存在靜態記憶體中,後續呼叫
asctime()
會覆蓋之前的內容。 - 它要求輸入的必須是一個
struct tm
結構體,因此在使用之前通常需要透過localtime()
或gmtime()
將time_t
轉換為tm
結構。
2. ctime()
作用:
ctime()
函式直接將 time_t
型別的時間戳轉換為可讀的字串,而不需要手動呼叫 localtime()
或 gmtime()
。它等效於將 time_t
先轉換為本地時間的 tm
結構體(透過 localtime()
),然後呼叫 asctime()
進行格式化。
函式原型:
char *ctime(const time_t *timep);
-
引數:
timep
:指向time_t
型別的指標,表示要轉換的時間戳。
-
返回值:
- 返回一個指向靜態記憶體中字串的指標,格式與
asctime()
相同:Www Mmm dd hh:mm:ss yyyy\n
。
- 返回一個指向靜態記憶體中字串的指標,格式與
注意事項:
- 同樣地,返回的字串儲存在靜態記憶體中,後續呼叫
ctime()
會覆蓋之前的內容。 ctime()
不需要手動將time_t
轉換為tm
結構,它會自動呼叫localtime()
。
3. 區別
-
輸入型別不同:
asctime()
需要輸入一個struct tm *
型別的指標,也就是說必須提供一個已經分解為年月日時分秒的時間結構。ctime()
直接接受time_t *
型別的指標,也就是自1970年1月1日以來的秒數,它會自動呼叫localtime()
處理時間轉換。
-
使用場景不同:
asctime()
主要用於當你已經有一個struct tm
結構時,可以將其格式化為字串。ctime()
適用於你直接有一個time_t
型別的時間戳,可以快速將其轉為字串。
3.1 示例對比
asctime()
示例:
#include <iostream>
#include <ctime>
int main() {
time_t rawtime;
struct tm *timeinfo;
time(&rawtime); // 獲取當前時間(時間戳)
timeinfo = localtime(&rawtime); // 轉換為本地時間
std::cout << "Using asctime: " << asctime(timeinfo) << std::endl;
return 0;
}
ctime()
示例:
#include <iostream>
#include <ctime>
int main() {
time_t rawtime;
time(&rawtime); // 獲取當前時間(時間戳)
std::cout << "Using ctime: " << ctime(&rawtime) << std::endl;
return 0;
}
4. 總結
asctime()
用於將tm
結構(分解後的時間)轉換為字串,必須先將time_t
轉換為tm
結構。ctime()
更為簡化,直接將time_t
轉換為字串,相當於自動呼叫了localtime()
和asctime()
的組合。
兩者返回的字串格式相同,主要區別在於輸入的引數型別和適用的場景。