1. 程式人生 > >【C/C++時間系列】struct tm 通過strftime轉換成字串

【C/C++時間系列】struct tm 通過strftime轉換成字串

【分解的時間 struct tm】

struct tm 是linux中用來儲存分解時間的資料結構。其定義在time.h中,可通過下面命令找到

$whereis time.h

其結構定義如下,基本都是整型的。有幾點需要注意的

1、tm_sec 表示秒,除了0~59秒,可以取值60,主要是考慮leap second,即閏秒

2、tm_mday 是從1開始的,表示一個月的天數,最大31

3、tm_mon 是從0開始的,即0 表示1月。

4、tm_year 是現在的年份-1900得到的數字

5、tm_yday 是從0開始的,最大365,即可表示閏年

struct tm
{
  int tm_sec;                   /* Seconds.     [0-60] (1 leap second) */
  int tm_min;                   /* Minutes.     [0-59] */
  int tm_hour;                  /* Hours.       [0-23] */
  int tm_mday;                  /* Day.         [1-31] */
  int tm_mon;                   /* Month.       [0-11] */
  int tm_year;                  /* Year - 1900.  */
  int tm_wday;                  /* Day of week. [0-6] */
  int tm_yday;                  /* Days in year.[0-365] */
  int tm_isdst;                 /* DST.         [-1/0/1]*/
  long int tm_gmtoff;           /* Seconds east of UTC.  */
  __const char *tm_zone;        /* Timezone abbreviation.  */
  long int __tm_gmtoff;         /* Seconds east of UTC.  */
  __const char *__tm_zone;      /* Timezone abbreviation.  */
};

【strftime 實現定製字串】

strftime的函式原型同樣定義在time.h中

extern size_t strftime (char *__restrict __s,
                         size_t __maxsize,
                        __const char *__restrict __format,
                        __const struct tm *__restrict __tp);

該函式有4個引數,

char型的指標:通常可以定義一個 char型別的陣列來傳遞該引數

char myStr[255]="\0";

size_t 的大小:可以使用 sizeof 來實現,即

sizeof(myStr)

const char* 型別的format:常常用於控制格式,例如

string myFormat = "%Y-%m-%d:%H:%M:%S"

最後一個引數為傳入的 struct  tm 資料型別。需要傳遞一個指標。

【程式碼示例】

#include <iostream>
#include <string>
#include <time.h>
using namespace std;

int main()
{
  struct tm mytmstruct;
  mytmstruct.tm_sec=33;
  mytmstruct.tm_min=28;
  mytmstruct.tm_hour=14;
  mytmstruct.tm_mday=24;   //24號  
  mytmstruct.tm_mon=6;     //這裡表示7月
  mytmstruct.tm_year=118;  //注意這裡是118,118+1900=2018
  string myFormat = "%Y-%m-%d:%H:%M:%S";  //自定義格式
  char myStr[255]="\0";  //strftime 第一個引數是 char * 
  strftime(myStr,sizeof(myStr),myFormat.c_str(),&mytmstruct);  //myFormat.c_str() 相容c字串,c中沒有string型別
  cout<<"myStr is:" <<myStr <<endl;

編譯執行結果如下

$gcc -lstdc++ l_csdn_tm2str.cpp  -o tm2str
$./tm2str 
myStr is:2018-07-24:14:28:33

相關推薦

C/C++時間系列struct tm 通過strftime轉換字串

【分解的時間 struct tm】 struct tm 是linux中用來儲存分解時間的資料結構。其定義在time.h中,可通過下面命令找到 $whereis time.h 其結構定義如下,基本都是整型的。有幾點需要注意的 1、tm_sec 表示秒,除了0~59秒,

C/C++檔案處理系列struct stat 結構體定義

獲取檔案狀態的函式 stat fstat lstat 都與struct stat 有關。函式原型如下,都定義在   sys/stat.h 中,原型如下   int stat(const char *path, struct stat *buf);   int fstat(i

C/C++時間系列通過time()函式獲取時間

【時間戳】Unix時間戳(Unix timestamp),或稱Unix時間(Unix time)、POSIX時間(POSIX time),是一種時間表示方式,定義為從格林威治時間1970年01月01日00時00分00秒起至現在的總秒數 ############## 【ti

C/C++時間系列通過gmtime()函式將時間轉換GMT時間

【GMT】Greenwich Mean Time 格林尼治標準時間的正午是指當太陽橫穿格林尼治子午線時(也就是在格林尼治時)的時間。 地球每天的自轉是有些不規則的,而且正在緩慢減速。所以,格林尼治時間已經不再被作為標準時間使用。現在的標準時間──世界標準時間(UTC) 【U

腫瘤預測模型系列如何在R軟體中求一致性指數( Harrell'concordance index:C-index)?

今晚收到一封醫生好友的郵件,諮詢如何求Harrell的C-index?曾在丁香園論壇裡遇到過朋友求助,自己也嘗試回答過,論壇裡回答的言簡意賅,針對問題論問題,沒有詳細的原理說明,今天趁回覆朋友郵件的機會,就大致總結下自己對C-index的理解以及在R軟體中的計算過程。 所謂C-index,英文名全稱conc

徹底搞清楚 C/C++ 中日期和時間 time_t 與 struct tm,time(NULL),ctime;strftime

#include <stdio.h> #include <stdlib.h> #include <time.h> int main( void ) { long i = 10000000L;

異常/錯誤處理系列C語言如何實現異常處理

前言:     不管是哪門程式語言,在coding過程中,我們都會遇到一個很頭痛的問題,就是如何處理函式的返回值和異常。函式返回值傳統的處理的方法是使用If/else。但對於有返回碼的函式,需要寫“無數”的if分支,程式碼很難看,也不好維護。異常處理更是頭痛,一旦發生,只有

C/C++檔案處理系列fstream::open函式開啟檔案

【fstream::open】 函式原型 void open (const char* filename, ios_base::openmode mode = ios_base::in | ios_base::out); 其中 filename 為

C#冷知識系列(一)那些你知道或者不知道的奇淫巧技

愛的 讓我 同事 orm lec 工程師 能夠 代碼 優勢 引子 正如我在個人介紹中所寫,我是一個仍然堅持.NET的頭鐵高級軟件工程師,研究C#,.NET已經六年多,一直堅持認為自己的能力不足以教授別人,所以一直沒有想法寫博客。工作幾年,內容涵蓋了.NET框架下的各種軟件的

真槍實幹系列Xibo-CMS-Layout關於時間軸優先順序的測試

時間軸優先順序 所有關於Xibo文章,均由檸檬加冰CSDN首發,歡迎大家支援原創 使用佈局(Layout)的過程中,發現兩個問題 背景區域如果不設定任何東西的話,那麼佈局的狀態永遠是個叉號

c/c++日期時間處理與字符串string轉換

輸入輸出 一個數 代碼 string轉換 計算 字符 span 日期 時間轉化 在c/c++實際問題的編程中,我們經常會用到日期與時間的格式,在算法運行中,通常將時間轉化為int來進行計算,而處理輸入輸出的時候,日期時間的格式卻是五花八門,以各種標點空格相連或者不加標點。

C# Unix時間戳和DateTime類型相互轉換

c# double timezone 時間戳 convert ret mil alt 相互轉換      /// <summary> /// 將Unix時間戳轉換為DateTime類型時間 /// </summary>

數據庫系列MySql中的select的鎖表範圍

nbsp 範圍 nod 指定 lock 無數據 才會 rdb sele 由於InnoDB預設的是Row-Level Lock,只有明確指定主鍵的時候MySql才會執行Row lock,否則MySql將會執行Table Lock. 1、明確指定主鍵則是行鎖 2、明確指定主鍵,

SQL Server 學習系列-- 獲取字符串中出現某字符的次數及字符某次出現的下標

nbsp pan urn ace server type char sel sql DECLARE @Str NVARCHAR(500) = ‘1_BB_CC_DD_AA_EE_YY_WW_HH_GG‘ --// 1. 獲取下劃線在字符串中出現的次數 SELECT LE

ASP.NET MVC系列淺談MVC

後端 nbsp 文獻 ats 路勁 onf 將在 cot get 描述 本篇文章主要概述ASP.NET MVC,具體包括如下內容: 1.MVC模式概述 2.WebForm概述 3.WebForm與MVC區別 4.ASP.NET MVC發展歷程 5.運用程序結構 6.ASP.

APS.NET 框架系列淺談ASP.NET 框架

處理請求 splay bapi tps cat 底層 show 一個 優化 本篇文章稍微偏原理且底層,有一定難度和且比較晦澀。 本篇文章主要是從廣度上概括一下,具體的更細粒度的,會在後續的文章中,結合具體的Demo實例分析。 一 .NET框架概述

ASP.NET MVC系列淺談表單和HTML輔助方法

繼承 好的 內容 概述 調用 復制 畫圖 models pac 【01】淺談Google Chrome瀏覽器(理論篇) 【02】淺談Google Chrome瀏覽器(操作篇)(上) 【03】淺談Google Chrome瀏覽器(操作篇)(下) 【04】淺談AS

中文分詞系列 8 更好的新詞發現演算法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

黑帽SEO系列網頁劫持和頁面跳轉

網頁劫持是目前黑帽SEO或者說黑產最喜歡的一種網頁引流方式,此手法往往通過入侵政府、教育機構網站(權重高),修改網站原始碼、放寄生蟲程式、設定二級目錄反向代理等實現。網頁劫持可以分為服務端劫持、客戶端劫持、百度快照劫持、百度搜索劫持等等;表現形式可以是劫持跳轉,也可以是劫持呈現的網頁內容,目

黑帽SEO系列基礎知識

【黑帽SEO系列】基礎知識 發表於 2016-10-09 | 分類於 黑產研究 | 熱度 3320 ℃   SEO全稱為搜尋引擎優化,是指通過站內優化、站外優化等方式,提升搜尋引擎收錄排名。既然有SEO技術,便會有相應的從業人員,他們被稱為白帽SEO,專指通過公正SEO手法,幫助提升站點排名