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,而是更加底層的格式解析。