0、讀取系統(tǒng)毫秒級時間
long getCurrentTime()
{
struct timeval tv;
gettimeofday(&tv,NULL);
return tv.tv_sec * 1000 + tv.tv_usec / 1000;
}
1、時間戳(秒級)
? ? ?在Linux系統(tǒng)中撕阎,時間戳是一個絕對值,表示距離時間(1970-1-1, 00:00:00)的秒數(shù)。在C\C++ 語言中,用數(shù)據(jù)類型time_t 表示時間戳愿险,time_t 本質上是一個long int笛丙。獲取當前時間的時間戳代碼如下所示:
#include
#include
int main(int argc, const char * argv[])
{
time_t now;
time(&now);
printf("now:%ld",now);
}
上面程序打印出的數(shù)據(jù)為“now:1470918308” 漾脂;1470918308表示當前時間距離格林威治時間的秒數(shù);在shell終端下命令 "date -d @1470918308 " 打印出這個時間戳的日期格式為Thu Aug 11 20:22:47 CST 2016胚鸯。
2骨稿、如何將時間戳轉換成特定的時間格式
? ? ? 經常碰到的一個問題是將一個時間戳顯示成指定的顯示格式,比如講上面的時間顯示為2016-8-11姜钳。C/C++ 語言中坦冠,和時間操作相關的關鍵數(shù)據(jù)結構是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的年數(shù)/
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數(shù)據(jù)結構辙浑。C/C++提供了倆個函數(shù)struct tm *gmtime(const time_t *timep) 和struct tm *localtime(const time_t *timep); 其中gtime轉換后的tm是基于時區(qū)0的,而localtime轉換后的是基于當?shù)貢r區(qū)【中國為時區(qū)8】拟糕;因為同一時間戳在不同地區(qū)的表示時間是不一樣的【因為時區(qū)不一樣】判呕。我們便可利用經過localtime轉換后的tm展示當前時間了,tim_mo+1送滞、tm_year+1990后才是我們想要看到的時間侠草。我們也可以利用接口 size_t strftime(char *s, size_t max, const char *format,const struct tm *tm) 來定制我們的時間格式。
#include<stdio.h>
#include<time.h>
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;
}
上面程序輸出的數(shù)據(jù)為: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)函數(shù)將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); //按當?shù)貢r區(qū)將2016/08/13/06/12解析成tmp_time
time_t t = mktime(tmp_time);//按當?shù)貢r區(qū)解析tmp_time
printf("%ld\n",t);
free(tmp_time);
}