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原始碼修改過的版本(或者可以直接拿來用。其實現並沒有用到sscanf,而是更加底層的格式解析。