c++11多種格式時(shí)間轉(zhuǎn)化為字符串的方法實(shí)現(xiàn)
1.打印系統(tǒng)當(dāng)前時(shí)間,或者將系統(tǒng)當(dāng)前時(shí)間轉(zhuǎn)化為字符串
#include <iostream>
#include <sstream>
#include <iomanip>
#include <chrono>
int main()
{
//打印到標(biāo)準(zhǔn)輸出
auto t = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
std::cout << std::put_time(std::localtime(&t), "%F %T") << std::endl;
//轉(zhuǎn)為字符串
std::stringstream ss;
ss << std::put_time(std::localtime(&t), "%F %T");
std::string str = ss.str();
return 0;
}
運(yùn)行截圖:

代碼講解:
(1)%F %T 是格式化字符串,其中%F 代表 年-月-日 的組合。%T 代表 時(shí):分:秒的組合
? ? ? ? ?%F %T 等價(jià)于 %Y-%m-%d %H:%M:%S。 更加細(xì)粒度的控制,可以自己對(duì)應(yīng)組合(%Y,%m...分別對(duì)應(yīng)年月日時(shí)分秒,怎么控制輸出隨便你)。比如現(xiàn)在我只需要打印 時(shí)-分 這樣的格式,換成 %H - %M 即可
一般記住這幾個(gè)常用的格式就夠應(yīng)付大多數(shù)場(chǎng)景了,更全面的格式請(qǐng)參考
(2)關(guān)于chrono::system_clock的詳細(xì)講解,前看前文
?2.將time_t 類型,或者 long long 類型代表的秒數(shù)轉(zhuǎn)換為字符串
有時(shí)候我們和其他的函數(shù),甚至其他語言交互的時(shí)候,對(duì)方向你拋出一個(gè)time_t 類型的時(shí)間,或者long long類型的時(shí)間,現(xiàn)在需要我們轉(zhuǎn)換為字符串。別慌,請(qǐng)看下面示例:
#include <iostream>
#include <iomanip>
#include <chrono>
int main()
{
//從1970年1月1日00:00:00所經(jīng)過的秒數(shù)
long long seconds = 1532581415;
std::time_t t(seconds);
std::cout << std::put_time(std::localtime(&t), "[%F %T]") << std::endl;
return 0;
}
運(yùn)行截圖:

代碼講解:
【注意】: long long seconds 一定要是秒數(shù)。(如果是毫秒那就除以1000 轉(zhuǎn)為秒咯,其他類似轉(zhuǎn)),不然轉(zhuǎn)換為std::time_t 就失敗了。其他和前一個(gè)示例一樣。
總結(jié):
以前總是看別的語言 DateTime::toString("yyyy.MM.dd hh:mm:ss.zzz ddd")啥的非常方便格式化時(shí)間,現(xiàn)在c++ 11也可以啦,只要自己稍微封裝下就好了。
更多的格式化字符串及意義:
| 轉(zhuǎn)換 說明符 |
解釋 | 使用的域 |
|---|---|---|
| % | 寫字面的 % 。完整轉(zhuǎn)換指定必須是 %% 。 | |
| n (C++11) |
寫換行符 | |
| t (C++11) |
寫水平制表符 | |
| 年 | ||
| Y | 以 4 位十進(jìn)制數(shù)寫年。 | tm_year |
| EY (C++11) |
以替用方式寫年。例如在 ja_JP 本地環(huán)境中,以“平成23年”取代“2011年”。 | tm_year |
| y | 寫年的末 2 位十進(jìn)制數(shù)(范圍[00,99])。 | tm_year |
| Oy (C++11) |
以替用數(shù)字系統(tǒng)寫年的末 2 位數(shù)字。例如在 ja_JP 本地環(huán)境中以“十一”取代“11”。 | tm_year |
| Ey (C++11) |
將年寫作從本地環(huán)境的替用時(shí)期 %EC 的偏移(本地環(huán)境依賴)。 | tm_year |
| C (C++11) |
寫年的首 2 位十進(jìn)制數(shù)(范圍 [00,99] )。 | tm_year |
| EC (C++11) |
以本地環(huán)境的替用表示寫年份基底(時(shí)期),例如 ja_JP 中的“平成”。 | tm_year |
| G (C++11) |
寫基于 ISO 8601 的年,即是包含指定星期的年份。
IS0 8601 中星期以星期一開始,而且一年的首星期必須滿足下列要求:
|
tm_year, tm_wday, tm_yday |
| g (C++11) |
寫基于 ISO 8601 的年,即是包含指定星期年份,的后 2 位數(shù)(范圍 [00,99] )。
IS0 8601 中星期以星期一開始,而且一年的首星期必須滿足下列要求:
|
tm_year, tm_wday, tm_yday |
| 月 | ||
| b | 寫縮略月名,例如 Oct (本地環(huán)境依賴)。 | tm_mon |
| h (C++11) |
與 b 同意。 | tm_mon |
| B | 寫完整月名,例如 October (本地環(huán)境依賴)。 | tm_mon |
| m | 將月寫作十進(jìn)制數(shù)(范圍 [01,12] )。 | tm_mon |
| Om (C++11) |
以替用數(shù)字系統(tǒng)寫月。例如 ja_JP 本地環(huán)境中“十二”取代“12”。 | tm_mon |
| 星期 | ||
| U | 以十進(jìn)制數(shù)寫年的星期(星期日是星期的首日)(范圍 [00,53] )。 | tm_year, tm_wday, tm_yday |
| OU (C++11) |
以替用數(shù)值系統(tǒng)寫如同用 %U 的年的星期。例如“五十二”在 ja_JP 本地環(huán)境中取代“52”。 | tm_year, tm_wday, tm_yday |
| W | 以十進(jìn)制數(shù)寫年的星期(星期一是星期的首日)(范圍 [00,53] )。 | tm_year, tm_wday, tm_yday |
| OW (C++11) |
以替用數(shù)值系統(tǒng)寫如同用 %W 的年的第星期。例如“五十二”在 ja_JP 本地環(huán)境中取代“52”。 | tm_year, tm_wday, tm_yday |
| V (C++11) |
寫 ISO 8601 的年的星期(范圍[00,53])。
IS0 8601 中星期以星期一開始,而且一年的首星期必須滿足下列要求:
|
tm_year, tm_wday, tm_yday |
| OV (C++11) |
以替用數(shù)值系統(tǒng)寫如同用 %V 的年的星期。例如“五十二”在 ja_JP 本地環(huán)境中取代“52”。 | tm_year, tm_wday, tm_yday |
| 年/月之日 | ||
| j | 以十進(jìn)制數(shù)寫年的第幾日(范圍 [001,366] )。 | tm_yday |
| d | 以十進(jìn)制數(shù)寫月的第幾日(范圍 [01,31] )。 | tm_mday |
| Od (C++11) |
以替用數(shù)字系統(tǒng)寫零基的月的第幾日。例如 ja_JP 本地環(huán)境中“二十七”取代“ 27 ”。
單字符前加空格。 |
tm_mday |
| e (C++11) |
以十進(jìn)制數(shù)寫月的第幾日(范圍[01,31])。
單數(shù)字前加空格。 |
tm_mday |
| Oe (C++11) |
以替用數(shù)字系統(tǒng)寫一基的月的第幾日。例如 ja_JP 本地環(huán)境中“二十七”取代“27”。
單字符前加空格。 |
tm_mday |
| 星期之日 | ||
| a | 寫縮略的星期日期名,例如 Fri (本地環(huán)境依賴)。 | tm_wday |
| A | 寫完整的星期日期名,例如 Friday (本地環(huán)境依賴)。 | tm_wday |
| w | 以十進(jìn)制數(shù)寫星期日期,其中星期日是 0 (范圍 [0-6] )。 | tm_wday |
| Ow (C++11) |
用替用數(shù)字系統(tǒng)寫星期日期,其中星期日是 0 。例如 ja_JP 本地環(huán)境中“二”取代“2”。 | tm_wday |
| u (C++11) |
十進(jìn)制數(shù)寫星期日期,其中星期一是 1 ( ISO 8601 格式)(范圍 [1-7] )。 | tm_wday |
| Ou (C++11) |
用替用數(shù)字系統(tǒng)寫星期日期,其中星期一是 1 。例如 ja_JP 本地環(huán)境中“二”取代“2”。 | tm_wday |
| 時(shí)、分、秒 | ||
| H | 以十進(jìn)制數(shù)寫時(shí), 24 小時(shí)制(范圍 [00-23] )。 | tm_hour |
| OH (C++11) |
以替用數(shù)字系統(tǒng)寫 24 小時(shí)制的時(shí)。例如 ja_JP 本地環(huán)境中“十八”取代“18”。 | tm_hour |
| I | 以十進(jìn)制數(shù)寫時(shí), 12 小時(shí)制(范圍 [01,12] )。 | tm_hour |
| OI (C++11) |
以替用數(shù)字系統(tǒng)寫 12 小時(shí)制的時(shí)。例如 ja_JP 本地環(huán)境中“六”取代“6”。 | tm_hour |
| M | 以十進(jìn)制數(shù)寫分(范圍 [00,59] )。 | tm_min |
| OM (C++11) |
以替用數(shù)字系統(tǒng)寫分。例如 ja_JP 本地環(huán)境中“二十五”取代“25”。 | tm_min |
| S | 以十進(jìn)制數(shù)寫秒(范圍 [00,60] )。 | tm_sec |
| OS (C++11) |
以替用數(shù)字系統(tǒng)寫秒。例如 ja_JP 本地環(huán)境中“二十四”取代“24”。 | tm_sec |
| 其他 | ||
| c | 寫標(biāo)準(zhǔn)日期時(shí)間字符串。例如 Sun Oct 17 04:41:13 2010 (本地環(huán)境依賴)。 | 全部 |
| Ec (C++11) |
寫替用日期時(shí)間字符串。例如 ja_JP 本地環(huán)境中“平成23年”取代“2011年”。 | 全部 |
| x | 寫本地化的日期表示(本地環(huán)境依賴)。 | 全部 |
| Ex (C++11) |
寫替用日期表示。例如 ja_JP 本地環(huán)境中“平成23年”取代“2011年”。 | 全部 |
| X | 寫本地化的時(shí)間表示,例如 18:40:20 或 6:40:20 PM (本地環(huán)境依賴)。 | 全部 |
| EX (C++11) |
寫替用時(shí)間表示(本地環(huán)境依賴)。 | 全部 |
| D (C++11) |
等價(jià)于"%m/%d/%y"。 | tm_mon, tm_mday, tm_year |
| F (C++11) |
等價(jià)于"%Y-%m-%d"( ISO 8601 日期格式)。 | tm_mon, tm_mday, tm_year |
| r (C++11) |
寫本地化的 12 小時(shí)制時(shí)間(本地環(huán)境依賴)。 | tm_hour, tm_min, tm_sec |
| R (C++11) |
等價(jià)于"%H:%M"。 | tm_hour, tm_min |
| T (C++11) |
等價(jià)于"%H:%M:%S"( ISO 8601 時(shí)間格式)。 | tm_hour, tm_min, tm_sec |
| p | 寫本地化的 a.m. 或 p.m. (本地環(huán)境依賴)。 | tm_hour |
| z (C++11) |
以 ISO 8601 格式(例如 -0430 )寫距 UTC 的偏移,或者倘若時(shí)區(qū)信息不可用則不寫字符。 | tm_isdst |
| Z | 寫依賴本地環(huán)境的時(shí)區(qū)名或縮寫,或者若時(shí)區(qū)信息不可用則不寫字符。 | tm_isdst |
到此這篇關(guān)于c++11多種格式時(shí)間轉(zhuǎn)化為字符串的方法實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)c++11時(shí)間轉(zhuǎn)化為字符串內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Species Tree 利用HashTable實(shí)現(xiàn)實(shí)例代碼
這篇文章主要介紹了Species Tree 利用HashTable實(shí)現(xiàn)實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-01-01
C++中#pragma once與#ifndef對(duì)比分析
當(dāng)我們編寫C++代碼時(shí),經(jīng)常需要使用頭文件來引入一些常用的函數(shù)、類或者變量,如果一個(gè)頭文件被重復(fù)包含,就會(huì)導(dǎo)致編譯錯(cuò)誤或者運(yùn)行時(shí)錯(cuò),為了避免發(fā)生,我們需要使用預(yù)處理指令來防止頭文件被重復(fù)包含,常用的預(yù)處理指令有#pragma once和#ifndef,需要的朋友可以參考下2023-05-05
C語言標(biāo)準(zhǔn)庫<math.h>和<setjmp.h>的實(shí)現(xiàn)
本文主要介紹了C語言標(biāo)準(zhǔn)庫<math.h>和<setjmp.h>的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-11-11
C++11中跳轉(zhuǎn)initializer_list實(shí)現(xiàn)分析
這篇文章主要介紹了C++11中跳轉(zhuǎn)initializer_list實(shí)現(xiàn)分析,實(shí)例分析initializer_list<T>初體驗(yàn),結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04
C語言中的函數(shù)指針基礎(chǔ)學(xué)習(xí)教程
這篇文章主要介紹了C語言中的函數(shù)指針基礎(chǔ)學(xué)習(xí)教程,包括函數(shù)指針作為參數(shù)來傳遞等重要知識(shí),需要的朋友可以參考下2016-04-04

