【c++實例總結】 時間time_t轉爲字符串輸出(strftime)

1.time_t轉爲字符串輸出

api:

localtime_s       --將time_t轉爲tm結構體

strftime             --將tm格式化輸出

 

代碼如下:

#include <iostream>
//#include <chrono>
#include <ctime>

int main()
{

	/*std::chrono::system_clock::time_point tp = std::chrono::system_clock::now();
	__time64_t time_now = std::chrono::system_clock::to_time_t(tp);*/

	/*char _time[250];
	ctime_s(_time, sizeof(_time), &time_now);
	cout << "now time is : " << _time;*/
	//計算距離1970-1-1,00:00的時間長度,因爲當前時間點定

	/*char buf[250];
	tm local_time;
	localtime_s(&local_time, &time_now);
	strftime(buf, sizeof(buf), "%Y-%m-%d,%H:%M:%S", &local_time);

	cout << "now time is : " << buf;*/

	time_t rawtime;
	struct tm info;
	char buffer[80];

	time(&rawtime);

	localtime_s(&info, &rawtime);  //將time_t轉爲tm

	strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", &info);
	printf("格式化的日期 & 時間 : |%s|\n", buffer);

	system("pause");
    return 0;
}

注意:

1.localtime、localtime_s、localtime_r

功能:將time_t轉爲tm結構體

localtime是非線程安全的,localtime_s、localtime_r都是線程安全的,但是localtime_s是windows平臺的,localtime_r是linux平臺的

2.ctime、ctime_s、strftime

功能:將tm轉爲字符串顯示

ctime返回一個指向靜態數據的指針並且不是線程安全的,C標準也建議strftime不要使用ctime、ctime_s,因爲strftime它更靈活且對語言環境敏感

3.tm結構體與時間顯示
struct tm的結構爲

  int tm_sec;       /* 秒 – 取值區間爲[0,59] */
          int tm_min;       /* 分 - 取值區間爲[0,59] */
          int tm_hour;      /* 時 - 取值區間爲[0,23] */
          int tm_mday;     /* 一個月中的日期 - 取值區間爲[1,31] */
          int tm_mon;       /* 月份(從一月開始,0代表一月) - 取值區間爲[0,11] */
          int tm_year;        /* 年份,其值等於實際年份減去1900 */
          int tm_wday;      /* 星期 – 取值區間爲[0,6],其中0代表星期天,1代表星期一,以此類推 */
          int tm_yday;       /* 從每年的1月1日開始的天數 – 取值區間爲[0,365],其中0代表1月1日,1代表1月2日,以此類推 */
          int tm_isdst;      /* 夏令時標識符,實行夏令時的時候,tm_isdst爲正。不實行夏令時的進候,tm_isdst爲0;不瞭解情況時,tm_isdst()爲負。*/


時間顯示:

#include <iostream>
#include <time.h>
int main()
{
	time_t time_seconds = time(0);
	struct tm now_time;
	localtime_s(&now_time, &time_seconds);
	printf("%d-%d-%d %d:%d:%d/n", now_time.tm_year + 1900, now_time.tm_mon + 1, now_time.tm_mday, now_time.tm_hour, now_time.tm_min, now_time.tm_sec);
}

注意:

(1)tm_year並不是實際年份,tm_year值等於實際年份減去1900

應用:

已知tm_year,那麼實際顯示時的年份爲(tm_year+1900)

已知實際顯示年份,轉爲tm結構體時,裏面年份爲(實際年份-1900)

(2)tm_mon月份(從一月開始,0代表一月) - 取值區間爲[0,11]

實際顯示是要加1進行顯示

4.time_t與tm結構體相互轉換

api:

localtime_s  --將time_t轉爲tm結構體

mktime         --將tm轉爲time_t結構體

 

time_t rawtime;
struct tm info;
char buffer[80];

time(&rawtime);

localtime_s(&info, &rawtime);//將time_t轉爲tm

time_t dd = std::mktime(&info);//將tm轉爲time_t

 

 

 

 

發佈了45 篇原創文章 · 獲贊 21 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章