溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

c++11多種格式時間轉(zhuǎn)化為字符串的實現(xiàn)方法是什么

發(fā)布時間:2021-11-29 09:09:52 來源:億速云 閱讀:218 作者:柒染 欄目:開發(fā)技術(shù)

c++11多種格式時間轉(zhuǎn)化為字符串的實現(xiàn)方法是什么,針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

1.打印系統(tǒng)當(dāng)前時間,或者將系統(tǒng)當(dāng)前時間轉(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;
}

運行截圖:

c++11多種格式時間轉(zhuǎn)化為字符串的實現(xiàn)方法是什么

代碼講解:

(1)%F %T 是格式化字符串,其中%F 代表 年-月-日 的組合。%T 代表 時:分:秒的組合

         %F %T 等價于 %Y-%m-%d %H:%M:%S。 更加細(xì)粒度的控制,可以自己對應(yīng)組合(%Y,%m...分別對應(yīng)年月日時分秒,怎么控制輸出隨便你)。比如現(xiàn)在我只需要打印 時-分 這樣的格式,換成 %H - %M 即可

一般記住這幾個常用的格式就夠應(yīng)付大多數(shù)場景了,更全面的格式請參考

(2)關(guān)于chrono::system_clock的詳細(xì)講解,前看前文

 2.將time_t 類型,或者 long long 類型代表的秒數(shù)轉(zhuǎn)換為字符串

有時候我們和其他的函數(shù),甚至其他語言交互的時候,對方向你拋出一個time_t 類型的時間,或者long long類型的時間,現(xiàn)在需要我們轉(zhuǎn)換為字符串。別慌,請看下面示例:

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

運行截圖:

c++11多種格式時間轉(zhuǎn)化為字符串的實現(xiàn)方法是什么

代碼講解:

【注意】: long long seconds 一定要是秒數(shù)。(如果是毫秒那就除以1000 轉(zhuǎn)為秒咯,其他類似轉(zhuǎn)),不然轉(zhuǎn)換為std::time_t 就失敗了。其他和前一個示例一樣。

總結(jié):

以前總是看別的語言 DateTime::toString("yyyy.MM.dd hh:mm:ss.zzz ddd")啥的非常方便格式化時間,現(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)境的替用時期 %EC 的偏移(本地環(huán)境依賴)。tm_year
C
(C++11)
的首 2 位十進(jìn)制數(shù)(范圍 [00,99] )。tm_year
EC
(C++11)
以本地環(huán)境的替用表示寫年份基底(時期),例如 ja_JP 中的“平成”。tm_year
G
(C++11)
基于 ISO 8601 的年,即是包含指定星期的年份。

IS0 8601 中星期以星期一開始,而且一年的首星期必須滿足下列要求:

  • 包含 1 月 4 日

  • 包含一年的首個星期四

tm_year, tm_wday, tm_yday
g
(C++11)
基于 ISO 8601 的年,即是包含指定星期年份,的后 2 位數(shù)(范圍 [00,99] )。

IS0 8601 中星期以星期一開始,而且一年的首星期必須滿足下列要求:

  • 包含 1 月 4 日

  • 包含一年的首個星期四

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 中星期以星期一開始,而且一年的首星期必須滿足下列要求:

  • 包含 1 月 4 日

  • 包含一年的首個星期四

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
時、分、秒
H以十進(jìn)制數(shù)寫, 24 小時制(范圍 [00-23] )。tm_hour
OH
(C++11)
以替用數(shù)字系統(tǒng)寫 24 小時制的。例如 ja_JP 本地環(huán)境中“十八”取代“18”。tm_hour
I以十進(jìn)制數(shù)寫, 12 小時制(范圍 [01,12] )。tm_hour
OI
(C++11)
以替用數(shù)字系統(tǒng)寫 12 小時制的。例如 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)日期時間字符串。例如 Sun Oct 17 04:41:13 2010 (本地環(huán)境依賴)。全部
Ec
(C++11)
替用日期時間字符串。例如 ja_JP 本地環(huán)境中“平成23年”取代“2011年”。全部
x寫本地化的日期表示(本地環(huán)境依賴)。全部
Ex
(C++11)
替用日期表示。例如 ja_JP 本地環(huán)境中“平成23年”取代“2011年”。全部
X寫本地化的時間表示,例如 18:40:20 或 6:40:20 PM (本地環(huán)境依賴)。全部
EX
(C++11)
替用時間表示(本地環(huán)境依賴)。全部
D
(C++11)
等價于"%m/%d/%y"。tm_mon, tm_mday, tm_year
F
(C++11)
等價于"%Y-%m-%d"( ISO 8601 日期格式)。tm_mon, tm_mday, tm_year
r
(C++11)
寫本地化的 12 小時制時間(本地環(huán)境依賴)。tm_hour, tm_min, tm_sec
R
(C++11)
等價于"%H:%M"。tm_hour, tm_min
T
(C++11)
等價于"%H:%M:%S"( ISO 8601 時間格式)。tm_hour, tm_min, tm_sec
p寫本地化的 a.m.p.m. (本地環(huán)境依賴)。tm_hour
z
(C++11)
以 ISO 8601 格式(例如 -0430 )寫距 UTC 的偏移,或者倘若時區(qū)信息不可用則不寫字符。tm_isdst
Z寫依賴本地環(huán)境的時區(qū)名或縮寫,或者若時區(qū)信息不可用則不寫字符。tm_isdst

關(guān)于c++11多種格式時間轉(zhuǎn)化為字符串的實現(xiàn)方法是什么問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI