linux 时间戳 c语言,c语言中的时间戳和时间格式
0、讀取系統毫秒級時間long getCurrentTime()
{
struct timeval tv;
gettimeofday(&tv,NULL);
return tv.tv_sec * 1000 + tv.tv_usec / 1000;
}
1、時間戳(秒級)
在Linux系統中,時間戳是一個絕對值,表示距離時間(1970-1-1, 00:00:00)的秒數。在C\C++ 語言中,用數據類型time_t 表示時間戳,time_t 本質上是一個long int。獲取當前時間的時間戳代碼如下所示:#include
#include
int main(int argc, const char * argv[])
{
time_t now;
time(&now);
printf("now:%ld",now);
}
上面程序打印出的數據為“now:1470918308” ;1470918308表示當前時間距離格林威治時間的秒數;在shell終端下命令 "date -d @1470918308 " 打印出這個時間戳的日期格式為Thu Aug 11 20:22:47 CST 2016。
2、如何將時間戳轉換成特定的時間格式
經常碰到的一個問題是將一個時間戳顯示成指定的顯示格式,比如講上面的時間顯示為2016-8-11。C/C++ 語言中,和時間操作相關的關鍵數據結構是struc tm,其定義如下:struct tm {
int tm_sec;? ? ? ? /* seconds ?0-59*/
int tm_min;? ? ? ? /* minutes 0-59*/
int tm_hour;? ? ? ? /* hours 0-23*/
int tm_mday;? ? ? ? /* day of the month 1-31*/
int tm_mon;? ? ? ? /* month 0-11*/
int tm_year;? ? ? ? /* year *距離1990的年數/
int tm_wday;? ? ? ? /* day of the week 0-6*/
int tm_yday;? ? ? ? /* day in the year 0-365*/
int tm_isdst;? ? ? /* daylight saving time */
};
在將時間戳表示成指定格式前,我們需要將時間戳轉換成tm數據結構。C/C++提供了倆個函數struct tm *gmtime(const time_t *timep) 和struct tm *localtime(const time_t *timep); 其中gtime轉換后的tm是基于時區0的,而localtime轉換后的是基于當地時區【中國為時區8】;因為同一時間戳在不同地區的表示時間是不一樣的【因為時區不一樣】。我們便可利用經過localtime轉換后的tm展示當前時間了,tim_mo+1、tm_year+1990后才是我們想要看到的時間。我們也可以利用接口 size_t strftime(char *s, size_t max, const char *format,const struct tm *tm) 來定制我們的時間格式。#include
#include
int main(int argc, const char * argv[])
{
time_t t;
time(&t);
struct tm *tmp_time = localtime(&t);
char s[100];
strftime(s, sizeof(s), "%04Y%02m%02d %H:%M:%S", tmp_time);
printf("%d: %s\n", (int)t, s);
return 0;
}
上面程序輸出的數據為:1470919776: 20160811 20:49:36。因此利用strftime我們可以隨意定制化顯示時間。
3、如何將時間格式轉換時間戳
有時候我們并不是想得到當前時間戳(time(&t)),而是希望將特定時間格式轉換成時間戳,比如計算2016/8/13的時間戳是多少。C/C++提供char *strptime(const char *s, const char *format, struct tm *tm);將時間格式字符串S按指定格式foramt解析成tm; 再用time_t mktime(struct tm *tm)函數將tm生成時間戳。例如程序打印2016/08/13的時間戳。#include
#include
int main(int argc, const char * argv[])
{
struct tm* tmp_time = (struct tm*)malloc(sizeof(struct tm));
strptime("2016/08/13/06/12","%Y/%m/%d/%H/%M",tmp_time); //按當地時區將2016/08/13/06/12解析成tmp_time
time_t t = mktime(tmp_time);//按當地時區解析tmp_time
printf("%ld\n",t);
free(tmp_time);
}
總結
以上是生活随笔為你收集整理的linux 时间戳 c语言,c语言中的时间戳和时间格式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分析linux系统的运行性能,Linux
- 下一篇: linux nvme分区,这些 loop