大家在平時的項目中,一定經(jīng)常面臨打日志信息的問題,在打日志這個問題上,大家有時一定會非常關注【時間戳】這個信息點。
想必大家也很經(jīng)常使用【gettimeofday】接口來獲取當前的系統(tǒng)時間,但是很遺憾的是,它獲取的時間信息是存儲在一個叫strcut timeval的結構體中。那么如何將這個結構體的時間信息轉(zhuǎn)換為可是顯示的時間字符串呢?
比如顯示 "2018-12-10 20:52:00"。本文就將給你答案,直接附上代碼:
#include
#include
#include
#include
//由struct timeval結構體數(shù)據(jù)(由gettimeofday獲取到的)轉(zhuǎn)換成可顯示的時間字符串
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));
/* 格式化日期和時間,精確到秒為單位。*/
//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
/* 從微秒計算毫秒。*/
milliseconds = tv->tv_usec / 1000;
/* 以秒為單位打印格式化后的時間日期,小數(shù)點后為毫秒。*/
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
測試結果如下:

上文的示例代碼中,給出了好幾種打印時間戳格式的示例,筆者只演示了其他的一種,其他的幾種,有待讀者親自去驗證。驗證的過程中,如果有發(fā)現(xiàn)什么問題,可隨時與我聯(lián)系。
-
字符串
+關注
關注
1文章
590瀏覽量
22301 -
代碼
+關注
關注
30文章
4900瀏覽量
70772 -
結構體
+關注
關注
1文章
131瀏覽量
11120
發(fā)布評論請先 登錄
字符串的表示

字符與字符串的顯示原理
字符串移位包含的問題解決方案
LabVIEW的常用字符串操作教程免費下載

評論