c++之std::get_time和std::put_time
std::get_time和std::put_time
在 C++ 中,std::get_time 和 std::put_time 是處理日期和時(shí)間格式化的兩個(gè)實(shí)用函數(shù)。它們提供了一種簡單的方法來解析和格式化日期時(shí)間字符串。它們都屬于<iomanip>
頭文件。
它們是 std::istream 和 std::ostream 的操作符,因此,它們沒有傳統(tǒng)意義上的構(gòu)造函數(shù)。它們用于格式化和解析日期時(shí)間,但本身并不涉及直接創(chuàng)建對象。
std::get_time
std::get_time
是一個(gè)流操作符,用于從流中解析日期時(shí)間字符串。
它實(shí)際上是一個(gè)函數(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 結(jié)構(gòu)的指針,用于存儲(chǔ)解析后的日期時(shí)間。
- fmt: 日期時(shí)間格式字符串,用于指定如何解析輸入字符串。
用法
#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); // 解析日期和時(shí)間 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; } // 輸出解析結(jié)果 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 字符串,并將結(jié)果填充到 std::tm 結(jié)構(gòu)中。格式字符串 “%Y-%m-%d %H:%M:%S” 說明了輸入字符串的日期時(shí)間格式。
- tm.tm_year:存儲(chǔ)的是從1900年開始的年份,所以需要加上1900才能得到實(shí)際年份。
- tm.tm_mon:存儲(chǔ)的是從0開始的月份,所以需要加上1才能得到實(shí)際月份。
std::put_time
std::put_time
是另一個(gè)流操作符,用于將 std::tm 結(jié)構(gòu)格式化為字符串。
它也是一個(gè)函數(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 結(jié)構(gòu)的指針,用于格式化日期時(shí)間。
- fmt: 日期時(shí)間格式字符串,用于指定輸出的格式。
用法
#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 結(jié)構(gòu)中的日期時(shí)間信息格式化為字符串,格式為 “%Y-%m-%d %H:%M:%S”。
- ss.str():獲取格式化后的日期時(shí)間字符串。
這兩個(gè)操作符分別用于日期時(shí)間的解析和格式化,但它們并不涉及直接創(chuàng)建對象的構(gòu)造函數(shù)。它們是 C++ 標(biāo)準(zhǔn)庫提供的流操作功能,通過流操作符來處理日期和時(shí)間。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
C++?Cartographer源碼中關(guān)于傳感器的數(shù)據(jù)傳遞實(shí)現(xiàn)
這篇文章主要介紹了C++?Cartographer源碼中關(guān)于傳感器的數(shù)據(jù)傳遞實(shí)現(xiàn),前面已經(jīng)談到了Cartographer中添加軌跡的方法和傳感器的數(shù)據(jù)流動(dòng)走向。發(fā)現(xiàn)在此調(diào)用了LaunchSubscribers這個(gè)函數(shù)來訂閱相關(guān)傳感器數(shù)據(jù)2023-03-03C++中Semaphore內(nèi)核對象用法實(shí)例
這篇文章主要介紹了C++中Semaphore內(nèi)核對象用法實(shí)例,有助于深入了解信號(hào)量(Semaphore)的基本用法,需要的朋友可以參考下2014-10-10使用C++和Direct3D (d3d)獲取屏幕截圖并根據(jù)傳入分辨率進(jìn)行縮放圖片大小(最新推薦)
這篇文章主要介紹了使用C++和Direct3D (d3d)獲取屏幕截圖并根據(jù)傳入分辨率進(jìn)行縮放圖片大小,本文給大家講解的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04Qt數(shù)據(jù)庫應(yīng)用之實(shí)現(xiàn)圖片轉(zhuǎn)pdf
這篇文章主要為大家詳細(xì)介紹了如何利用Qt實(shí)現(xiàn)圖片轉(zhuǎn)pdf功能,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)或工作有一定參考價(jià)值,需要的可以了解一下2022-06-06