REF:Linux和Windows下獲得當前時間並格式化, 19.7
很多時候我們希望在程序里獲得當前時間,比如“20190720 11:40:32”這樣的時間格式字符串,如何實現?
Linux下:
time_t now;
struct tm *tm;
time(&now);
tm = localtime(&now);
char time_str[100];
sprintf(time_str, "%04d%02d%02d %02d:%02d:%02d",
tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
tm->tm_hour, tm->tm_min, tm->tm_sec);
time_str的內容為“20190720 11:40:32”這樣格式的時間,也可以格式化為其他形式。
Windows下:
time_t curtime;
struct tm *timeinfo;
char buffer[80];
time(&curtime);
timeinfo = localtime(&curtime);
strftime(buffer, sizeof(buffer), "%Y-%m-%d-%H-%M-%S", timeinfo);
buffer的內容為“2019-07-20-11-40-32”這樣格式的時間,也可以格式化為其他形式。
注:
使用ctime函數和asctime函數也可以打印出本地時間的字符串,比如“Sun Aug 11 13:38:54 2019”這樣的形式。這兩個函數的區別就是傳參的不同,一個是time_t,一個是struct tm。
上面的strftime也是可以使用sprintf實現相同的功能。與strftime相反的操作是strptime,遺憾這個函數在Windows下沒有實現,網上能找到別人根據Linux下的strptime源碼修改過的版本(https://blog.csdn.net/earbao/article/details/51786724或者https://blog.csdn.net/wisage/article/details/6269997),可以直接拿來用。其實現並沒有用到sscanf,而是更加底層的格式解析。
