C\C++ windows 繞過strptime

bazingaedward發表於2016-01-15

strptime()函式功能是實現字串到時間的轉換,在linux下可以正常執行,但在windows中卻無法找到。Google後有篇微軟的博文和StackOverflow都提到了windows中開源的strptime.c檔案,但下載下來試後發現缺少很多標頭檔案,如“namespace.h”等,所以這條路走不通。後來依據任務要求發現可以不用strptime:
1.任務目標:給定各個時間要素得到至今為止的秒數;
2.原始strptime構思:

struct tm tt0;
//時間是2015年第2341600sprintf(d_time, "%d-%d %d:%d:%d", 2015, 234, 16, 0, 0);//先將時間要素轉成字串
strptime(d_time, "%Y-%j %H:%M:%S", &tt0);//再將字串d_time轉成tm結構的物件
time_t t0 = mktime(&tt0);//最後通過呼叫mktime函式得到time_t結構的秒數

3.繞過strptime實現:

struct tm tt0={0};//!!!特別注意,tt0最好賦初值,否則某些量容易出錯
//直接賦值tt0結構體,以下通過故意賦錯的值實現天數的賦值
//理論上如果賦天數應該是tt0.yday=234就行,但查閱文件後發現該值一般忽略,是由年月日確定後自動算出
//因此網上採取這種方法,將月份賦值為0表示January,當天數tm_mday大於31的時候會自動調整。
//[原文出處](http://stackoverflow.com/questions/9575131/why-is-mktime-changing-the-year-day-of-my-tm-struct)
tt0.tm_sec = 0;
tt0.tm_min = 0;
tt0.tm_hour = 16;
tt0.tm_mday = 234;
tt0.tm_mon = 0;
tt0.tm_year = 2015-1900;//!!!特別注意:必須減1900,否則mktime報錯
time_t t0 = mktime(&tt0);

相關文章