C++ 日期和時間:初學者指南
你好,未來的 C++ 魔法師們!今天,我們將進入 C++ 世界中的日期和時間的精彩旅程。如果你以前從未寫過一行代碼,也別擔心——我會在這裡陪你,一步步解釋一切。所以,拿起你 最喜歡的飲料,放鬆一下,我們一起深入探究吧!
理解基礎
在我們開始操作日期和時間之前,理解 C++ 沒有內置的日期類型是至關重要的。相反,它使用 time_t
數據類型來表示時間。這聽起來可能有點奇怪,但可以把它看作是一個大數字,表示自1970年1月1日以來經過的秒數。在計算機科學中,這個日期通常被稱為 "紀元"——它就像是現代計算機的生日!
當前日期和時間
讓我們從簡單而強大的東西開始——獲取當前的日期和時間。以下是操作方式:
#include <iostream>
#include <ctime>
int main() {
time_t now = time(0);
std::cout << "Current time: " << now << std::endl;
return 0;
}
讓我們來解析一下:
- 我們包含了兩個重要的頭文件:
<iostream>
用於輸入/輸出操作,<ctime>
用於與時間相關的函數。 - 在
main()
函數中,我們使用time(0)
獲取當前時間。 - 我們將此時間存儲在一個名為
now
的time_t
變量中。 - 最後,我們打印出這個值。
當你運行這個程序時,你會看到一個大數字被打印出來。那是自紀元以來的秒數。不太易讀,對嗎?別擔心,我們馬上就修復這個問題!
將 time_t 轉換為字符串
現在,讓我們使輸出更易讀:
#include <iostream>
#include <ctime>
int main() {
time_t now = time(0);
char* dt = ctime(&now);
std::cout << "The local date and time is: " << dt << std::endl;
return 0;
}
以下是新的東西:
- 我們使用
ctime()
函數將time_t
值轉換為字符串。 - 這個字符串存儲在
dt
中。 - 我們打印這個字符串,這會給我們一個易於閱讀的日期和時間。
好多了,對嗎?你應該會看到像 "The local date and time is: Tue Jun 22 15:30:45 2023" 之類的東西。
使用 struct tm 格式化時間
雖然 ctime()
很方便,但有時我們需要對日期和時間格式有更多的控制。這就是 struct tm
派上用場的地方。它是一個將時間分解為其組成部分(年、月、日、小時等)的結構。
讓我們看看如何使用它:
#include <iostream>
#include <ctime>
int main() {
time_t now = time(0);
tm *ltm = localtime(&now);
std::cout << "Year: " << 1900 + ltm->tm_year << std::endl;
std::cout << "Month: " << 1 + ltm->tm_mon << std::endl;
std::cout << "Day: " << ltm->tm_mday << std::endl;
std::cout << "Time: " << ltm->tm_hour << ":";
std::cout << ltm->tm_min << ":";
std::cout << ltm->tm_sec << std::endl;
return 0;
}
讓我們來解包這個:
- 我們使用
localtime()
將我們的time_t
值轉換為tm
結構。 - 然後,我們可以使用結構成員訪問日期和時間的個別組成部分。
- 請注意,我們給
tm_year
加上1900,因為它從1900年開始計數年。 - 我們給
tm_mon
加1,因為在這個結構中,月份的編號是0-11。
這使我們在呈現日期和時間信息方面具有更大的靈活性。
格式化選項
現在我們知道了如何訪問日期和時間的個別組成部分,讓我們看看一些常見的格式化選項:
格式指定符 | 描述 | 示例 |
---|---|---|
%Y | 年(4位數) | 2023 |
%y | 年(2位數) | 23 |
%m | 月(01-12) | 06 |
%d | 月份中的日(01-31) | 22 |
%H | 24小時格式的小時(00-23) | 15 |
%I | 12小時格式的小時(01-12) | 03 |
%M | 分鐘(00-59) | 30 |
%S | 秒(00-59) | 45 |
%p | AM 或 PM 標誌 | PM |
讓我們來使用這些:
#include <iostream>
#include <ctime>
#include <iomanip>
int main() {
time_t now = time(0);
tm *ltm = localtime(&now);
std::cout << "Custom format: "
<< std::put_time(ltm, "%Y-%m-%d %I:%M:%S %p")
<< std::endl;
return 0;
}
在這個示例中:
- 我們包含
<iomanip>
頭文件以獲取std::put_time
。 - 我們使用
std::put_time
根據我們提供的指定符格式化我們的時間。 - 這將輸出類似 "2023-06-22 03:30:45 PM" 的東西。
結論
恭喜你!你剛剛走出了在 C++ 中操作日期和時間的第一步。我們已經涵蓋了如何獲取當前時間,將其轉換為可讀字符串,訪問個別組成部分,甚至創建自定義格式。
請記住,處理日期和時間可能很複雜(想想時區、夏令時、閏年……),但這些基礎知識在大多數情況下都會對你有幫助。隨著你在 C++ 道路上的前進,你將會發現更多先進的技術和庫來處理複雜的日期和時間操作。
繼續練習,保持好奇心,最重要的是,編程愉快!誰知道呢,也許有一天你會編寫出下一個大型的時光機器的代碼。在那之前,讓你的編譯器保持熱度,你的語法錯誤保持冷靜!
Credits: Image by storyset