您好,登錄后才能下訂單哦!
c++11多種格式時間轉化為字符串的實現方法是什么,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
1.打印系統當前時間,或者將系統當前時間轉化為字符串
#include <iostream> #include <sstream> #include <iomanip> #include <chrono> int main() { //打印到標準輸出 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; //轉為字符串 std::stringstream ss; ss << std::put_time(std::localtime(&t), "%F %T"); std::string str = ss.str(); return 0; }
運行截圖:
代碼講解:
(1)%F %T 是格式化字符串,其中%F 代表 年-月-日 的組合。%T 代表 時:分:秒的組合
%F %T 等價于 %Y-%m-%d %H:%M:%S。 更加細粒度的控制,可以自己對應組合(%Y,%m...分別對應年月日時分秒,怎么控制輸出隨便你)。比如現在我只需要打印 時-分 這樣的格式,換成 %H - %M 即可
一般記住這幾個常用的格式就夠應付大多數場景了,更全面的格式請參考
(2)關于chrono::system_clock的詳細講解,前看前文
2.將time_t 類型,或者 long long 類型代表的秒數轉換為字符串
有時候我們和其他的函數,甚至其他語言交互的時候,對方向你拋出一個time_t 類型的時間,或者long long類型的時間,現在需要我們轉換為字符串。別慌,請看下面示例:
#include <iostream> #include <iomanip> #include <chrono> int main() { //從1970年1月1日00:00:00所經過的秒數 long long seconds = 1532581415; std::time_t t(seconds); std::cout << std::put_time(std::localtime(&t), "[%F %T]") << std::endl; return 0; }
運行截圖:
代碼講解:
【注意】: long long seconds 一定要是秒數。(如果是毫秒那就除以1000 轉為秒咯,其他類似轉),不然轉換為std::time_t 就失敗了。其他和前一個示例一樣。
總結:
以前總是看別的語言 DateTime::toString("yyyy.MM.dd hh:mm:ss.zzz ddd")啥的非常方便格式化時間,現在c++ 11也可以啦,只要自己稍微封裝下就好了。
更多的格式化字符串及意義:
轉換 說明符 | 解釋 | 使用的域 |
---|---|---|
% | 寫字面的 % 。完整轉換指定必須是 %% 。 | |
n (C++11) | 寫換行符 | |
t (C++11) | 寫水平制表符 | |
年 | ||
Y | 以 4 位十進制數寫年。 | tm_year |
EY (C++11) | 以替用方式寫年。例如在 ja_JP 本地環境中,以“平成23年”取代“2011年”。 | tm_year |
y | 寫年的末 2 位十進制數(范圍[00,99])。 | tm_year |
Oy (C++11) | 以替用數字系統寫年的末 2 位數字。例如在 ja_JP 本地環境中以“十一”取代“11”。 | tm_year |
Ey (C++11) | 將年寫作從本地環境的替用時期 %EC 的偏移(本地環境依賴)。 | tm_year |
C (C++11) | 寫年的首 2 位十進制數(范圍 [00,99] )。 | tm_year |
EC (C++11) | 以本地環境的替用表示寫年份基底(時期),例如 ja_JP 中的“平成”。 | tm_year |
G (C++11) | 寫基于 ISO 8601 的年,即是包含指定星期的年份。 IS0 8601 中星期以星期一開始,而且一年的首星期必須滿足下列要求:
| tm_year, tm_wday, tm_yday |
g (C++11) | 寫基于 ISO 8601 的年,即是包含指定星期年份,的后 2 位數(范圍 [00,99] )。 IS0 8601 中星期以星期一開始,而且一年的首星期必須滿足下列要求:
| tm_year, tm_wday, tm_yday |
月 | ||
b | 寫縮略月名,例如 Oct (本地環境依賴)。 | tm_mon |
h (C++11) | 與 b 同意。 | tm_mon |
B | 寫完整月名,例如 October (本地環境依賴)。 | tm_mon |
m | 將月寫作十進制數(范圍 [01,12] )。 | tm_mon |
Om (C++11) | 以替用數字系統寫月。例如 ja_JP 本地環境中“十二”取代“12”。 | tm_mon |
星期 | ||
U | 以十進制數寫年的星期(星期日是星期的首日)(范圍 [00,53] )。 | tm_year, tm_wday, tm_yday |
OU (C++11) | 以替用數值系統寫如同用 %U 的年的星期。例如“五十二”在 ja_JP 本地環境中取代“52”。 | tm_year, tm_wday, tm_yday |
W | 以十進制數寫年的星期(星期一是星期的首日)(范圍 [00,53] )。 | tm_year, tm_wday, tm_yday |
OW (C++11) | 以替用數值系統寫如同用 %W 的年的第星期。例如“五十二”在 ja_JP 本地環境中取代“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) | 以替用數值系統寫如同用 %V 的年的星期。例如“五十二”在 ja_JP 本地環境中取代“52”。 | tm_year, tm_wday, tm_yday |
年/月之日 | ||
j | 以十進制數寫年的第幾日(范圍 [001,366] )。 | tm_yday |
d | 以十進制數寫月的第幾日(范圍 [01,31] )。 | tm_mday |
Od (C++11) | 以替用數字系統寫零基的月的第幾日。例如 ja_JP 本地環境中“二十七”取代“ 27 ”。 單字符前加空格。 | tm_mday |
e (C++11) | 以十進制數寫月的第幾日(范圍[01,31])。 單數字前加空格。 | tm_mday |
Oe (C++11) | 以替用數字系統寫一基的月的第幾日。例如 ja_JP 本地環境中“二十七”取代“27”。 單字符前加空格。 | tm_mday |
星期之日 | ||
a | 寫縮略的星期日期名,例如 Fri (本地環境依賴)。 | tm_wday |
A | 寫完整的星期日期名,例如 Friday (本地環境依賴)。 | tm_wday |
w | 以十進制數寫星期日期,其中星期日是 0 (范圍 [0-6] )。 | tm_wday |
Ow (C++11) | 用替用數字系統寫星期日期,其中星期日是 0 。例如 ja_JP 本地環境中“二”取代“2”。 | tm_wday |
u (C++11) | 十進制數寫星期日期,其中星期一是 1 ( ISO 8601 格式)(范圍 [1-7] )。 | tm_wday |
Ou (C++11) | 用替用數字系統寫星期日期,其中星期一是 1 。例如 ja_JP 本地環境中“二”取代“2”。 | tm_wday |
時、分、秒 | ||
H | 以十進制數寫時, 24 小時制(范圍 [00-23] )。 | tm_hour |
OH (C++11) | 以替用數字系統寫 24 小時制的時。例如 ja_JP 本地環境中“十八”取代“18”。 | tm_hour |
I | 以十進制數寫時, 12 小時制(范圍 [01,12] )。 | tm_hour |
OI (C++11) | 以替用數字系統寫 12 小時制的時。例如 ja_JP 本地環境中“六”取代“6”。 | tm_hour |
M | 以十進制數寫分(范圍 [00,59] )。 | tm_min |
OM (C++11) | 以替用數字系統寫分。例如 ja_JP 本地環境中“二十五”取代“25”。 | tm_min |
S | 以十進制數寫秒(范圍 [00,60] )。 | tm_sec |
OS (C++11) | 以替用數字系統寫秒。例如 ja_JP 本地環境中“二十四”取代“24”。 | tm_sec |
其他 | ||
c | 寫標準日期時間字符串。例如 Sun Oct 17 04:41:13 2010 (本地環境依賴)。 | 全部 |
Ec (C++11) | 寫替用日期時間字符串。例如 ja_JP 本地環境中“平成23年”取代“2011年”。 | 全部 |
x | 寫本地化的日期表示(本地環境依賴)。 | 全部 |
Ex (C++11) | 寫替用日期表示。例如 ja_JP 本地環境中“平成23年”取代“2011年”。 | 全部 |
X | 寫本地化的時間表示,例如 18:40:20 或 6:40:20 PM (本地環境依賴)。 | 全部 |
EX (C++11) | 寫替用時間表示(本地環境依賴)。 | 全部 |
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 小時制時間(本地環境依賴)。 | 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. (本地環境依賴)。 | tm_hour |
z (C++11) | 以 ISO 8601 格式(例如 -0430 )寫距 UTC 的偏移,或者倘若時區信息不可用則不寫字符。 | tm_isdst |
Z | 寫依賴本地環境的時區名或縮寫,或者若時區信息不可用則不寫字符。 | tm_isdst |
關于c++11多種格式時間轉化為字符串的實現方法是什么問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。