c++之std::get_time和std::put_time
std::get_time和std::put_time
在 C++ 中,std::get_time 和 std::put_time 是處理日期和時間格式化的兩個實用函數(shù)。它們提供了一種簡單的方法來解析和格式化日期時間字符串。它們都屬于<iomanip>
頭文件。
它們是 std::istream 和 std::ostream 的操作符,因此,它們沒有傳統(tǒng)意義上的構造函數(shù)。它們用于格式化和解析日期時間,但本身并不涉及直接創(chuàng)建對象。
std::get_time
std::get_time
是一個流操作符,用于從流中解析日期時間字符串。
它實際上是一個函數(shù)模板,定義在 頭文件中。
template<typename CharT, typename Traits> std::basic_istream<CharT, Traits>& get_time(std::basic_istream<CharT, Traits>& is, std::tm* t, const CharT* fmt);
- is: 輸入流(例如 std::istringstream)。
- t: std::tm 結構的指針,用于存儲解析后的日期時間。
- fmt: 日期時間格式字符串,用于指定如何解析輸入字符串。
用法
#include <iostream> #include <sstream> #include <iomanip> #include <ctime> int main() { std::string datetime_str = "2024-08-14 15:30:00"; std::tm tm = {}; std::istringstream ss(datetime_str); // 解析日期和時間 ss >> std::get_time(&tm, "%Y-%m-%d %H:%M:%S"); if (ss.fail()) { std::cerr << "Error parsing date and time" << std::endl; return 1; } // 輸出解析結果 std::cout << "Year: " << tm.tm_year + 1900 << std::endl; std::cout << "Month: " << tm.tm_mon + 1 << std::endl; std::cout << "Day: " << tm.tm_mday << std::endl; std::cout << "Hour: " << tm.tm_hour << std::endl; std::cout << "Minute: " << tm.tm_min << std::endl; std::cout << "Second: " << tm.tm_sec << std::endl; return 0; }
- std::get_time(&tm, “%Y-%m-%d %H:%M:%S”):解析 datetime_str 字符串,并將結果填充到 std::tm 結構中。格式字符串 “%Y-%m-%d %H:%M:%S” 說明了輸入字符串的日期時間格式。
- tm.tm_year:存儲的是從1900年開始的年份,所以需要加上1900才能得到實際年份。
- tm.tm_mon:存儲的是從0開始的月份,所以需要加上1才能得到實際月份。
std::put_time
std::put_time
是另一個流操作符,用于將 std::tm 結構格式化為字符串。
它也是一個函數(shù)模板,定義在 頭文件中。
template<typename CharT, typename Traits> std::basic_ostream<CharT, Traits>& put_time(std::basic_ostream<CharT, Traits>& os, const std::tm* t, const CharT* fmt);
- os: 輸出流(例如 std::ostringstream)。
- t: 指向 std::tm 結構的指針,用于格式化日期時間。
- fmt: 日期時間格式字符串,用于指定輸出的格式。
用法
#include <iostream> #include <sstream> #include <iomanip> #include <ctime> int main() { std::tm tm = {}; tm.tm_year = 2024 - 1900; // 年份從1900年開始 tm.tm_mon = 8 - 1; // 月份從0開始 tm.tm_mday = 14; tm.tm_hour = 15; tm.tm_min = 30; tm.tm_sec = 0; std::ostringstream ss; ss << std::put_time(&tm, "%Y-%m-%d %H:%M:%S"); std::cout << "Formatted date and time: " << ss.str() << std::endl; return 0; }
- std::put_time(&tm, “%Y-%m-%d %H:%M:%S”):將 std::tm 結構中的日期時間信息格式化為字符串,格式為 “%Y-%m-%d %H:%M:%S”。
- ss.str():獲取格式化后的日期時間字符串。
這兩個操作符分別用于日期時間的解析和格式化,但它們并不涉及直接創(chuàng)建對象的構造函數(shù)。它們是 C++ 標準庫提供的流操作功能,通過流操作符來處理日期和時間。
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
C++?Cartographer源碼中關于傳感器的數(shù)據(jù)傳遞實現(xiàn)
這篇文章主要介紹了C++?Cartographer源碼中關于傳感器的數(shù)據(jù)傳遞實現(xiàn),前面已經(jīng)談到了Cartographer中添加軌跡的方法和傳感器的數(shù)據(jù)流動走向。發(fā)現(xiàn)在此調(diào)用了LaunchSubscribers這個函數(shù)來訂閱相關傳感器數(shù)據(jù)2023-03-03使用C++和Direct3D (d3d)獲取屏幕截圖并根據(jù)傳入分辨率進行縮放圖片大小(最新推薦)
這篇文章主要介紹了使用C++和Direct3D (d3d)獲取屏幕截圖并根據(jù)傳入分辨率進行縮放圖片大小,本文給大家講解的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-04-04Qt數(shù)據(jù)庫應用之實現(xiàn)圖片轉(zhuǎn)pdf
這篇文章主要為大家詳細介紹了如何利用Qt實現(xiàn)圖片轉(zhuǎn)pdf功能,文中的示例代碼講解詳細,對我們學習或工作有一定參考價值,需要的可以了解一下2022-06-06