大家在平時(shí)的項(xiàng)目中,一定經(jīng)常面臨打日志信息的問(wèn)題,在打日志這個(gè)問(wèn)題上,大家有時(shí)一定會(huì)非常關(guān)注【時(shí)間戳】這個(gè)信息點(diǎn)。
想必大家也很經(jīng)常使用【gettimeofday】接口來(lái)獲取當(dāng)前的系統(tǒng)時(shí)間,但是很遺憾的是,它獲取的時(shí)間信息是存儲(chǔ)在一個(gè)叫strcut timeval的結(jié)構(gòu)體中。那么如何將這個(gè)結(jié)構(gòu)體的時(shí)間信息轉(zhuǎn)換為可是顯示的時(shí)間字符串呢?
比如顯示 "2018-12-10 20:52:00"。本文就將給你答案,直接附上代碼:
#include
#include
#include
#include
//由struct timeval結(jié)構(gòu)體數(shù)據(jù)(由gettimeofday獲取到的)轉(zhuǎn)換成可顯示的時(shí)間字符串
static char * get_local_time(char *time_str, int len, struct timeval *tv)
{
struct tm* ptm;
char time_string[40];
long milliseconds;
ptm = localtime (&(tv->tv_sec));
/* 格式化日期和時(shí)間,精確到秒為單位。*/
//strftime (time_string, sizeof(time_string), "%Y/%m/%d %H:%M:%S", ptm); //輸出格式為: 2018/12/09 10:48:31.391
//strftime (time_string, sizeof(time_string), "%Y|%m|%d %H-%M-%S", ptm); //輸出格式為: 2018|12|09 10-52-28.302
//strftime (time_string, sizeof(time_string), "%Y-%m-%d %H:%M:%S", ptm); //輸出格式為: 2018-12-09 10:52:57.200
strftime (time_string, sizeof(time_string), "%Y\\%m\\%d %H-%M-%S", ptm); //輸出格式為: 2018\12\09 10-52-28.302
/* 從微秒計(jì)算毫秒。*/
milliseconds = tv->tv_usec / 1000;
/* 以秒為單位打印格式化后的時(shí)間日期,小數(shù)點(diǎn)后為毫秒。*/
snprintf (time_str, len, "%s.%03ld", time_string, milliseconds);
return time_str;
}
int main(int argc, const char **argv)
{
char local_time_str[128];
char *p = NULL;
struct timeval tv;
gettimeofday(&tv, NULL);
p = get_local_time(local_time_str, sizeof(local_time_str), &tv);
printf("Get local time: \n%s\n", p);
return 0;
}
編譯代碼,輸入:
gcc -o time_string_format time_string_format.c
測(cè)試結(jié)果如下:
上文的示例代碼中,給出了好幾種打印時(shí)間戳格式的示例,筆者只演示了其他的一種,其他的幾種,有待讀者親自去驗(yàn)證。驗(yàn)證的過(guò)程中,如果有發(fā)現(xiàn)什么問(wèn)題,可隨時(shí)與我聯(lián)系。
-
字符串
+關(guān)注
關(guān)注
1文章
585瀏覽量
20577 -
代碼
+關(guān)注
關(guān)注
30文章
4821瀏覽量
68888 -
結(jié)構(gòu)體
+關(guān)注
關(guān)注
1文章
130瀏覽量
10865
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論