C++ 日期和時間:初學者指南

你好,未來的 C++ 魔法師們!今天,我們將進入 C++ 世界中的日期和時間的精彩旅程。如果你以前從未寫過一行代碼,也別擔心——我會在這裡陪你,一步步解釋一切。所以,拿起你 最喜歡的飲料,放鬆一下,我們一起深入探究吧!

C++ Date & Time

理解基礎

在我們開始操作日期和時間之前,理解 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;
}

讓我們來解析一下:

  1. 我們包含了兩個重要的頭文件:<iostream> 用於輸入/輸出操作,<ctime> 用於與時間相關的函數。
  2. main() 函數中,我們使用 time(0) 獲取當前時間。
  3. 我們將此時間存儲在一個名為 nowtime_t 變量中。
  4. 最後,我們打印出這個值。

當你運行這個程序時,你會看到一個大數字被打印出來。那是自紀元以來的秒數。不太易讀,對嗎?別擔心,我們馬上就修復這個問題!

將 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;
}

以下是新的東西:

  1. 我們使用 ctime() 函數將 time_t 值轉換為字符串。
  2. 這個字符串存儲在 dt 中。
  3. 我們打印這個字符串,這會給我們一個易於閱讀的日期和時間。

好多了,對嗎?你應該會看到像 "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;
}

讓我們來解包這個:

  1. 我們使用 localtime() 將我們的 time_t 值轉換為 tm 結構。
  2. 然後,我們可以使用結構成員訪問日期和時間的個別組成部分。
  3. 請注意,我們給 tm_year 加上1900,因為它從1900年開始計數年。
  4. 我們給 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;
}

在這個示例中:

  1. 我們包含 <iomanip> 頭文件以獲取 std::put_time
  2. 我們使用 std::put_time 根據我們提供的指定符格式化我們的時間。
  3. 這將輸出類似 "2023-06-22 03:30:45 PM" 的東西。

結論

恭喜你!你剛剛走出了在 C++ 中操作日期和時間的第一步。我們已經涵蓋了如何獲取當前時間,將其轉換為可讀字符串,訪問個別組成部分,甚至創建自定義格式。

請記住,處理日期和時間可能很複雜(想想時區、夏令時、閏年……),但這些基礎知識在大多數情況下都會對你有幫助。隨著你在 C++ 道路上的前進,你將會發現更多先進的技術和庫來處理複雜的日期和時間操作。

繼續練習,保持好奇心,最重要的是,編程愉快!誰知道呢,也許有一天你會編寫出下一個大型的時光機器的代碼。在那之前,讓你的編譯器保持熱度,你的語法錯誤保持冷靜!

Credits: Image by storyset