我試圖在C中實現兩個簡單的轉換器,日期/時間到時間戳,反之亦然,沒有任何時間庫例程的依賴關係,例如mktime等。將日期/時間轉換爲時間戳,反之亦然
的時間戳是在幾秒鐘內,以及日期/時間結構是以下格式:
無符號字符年:0至99(表示2000〜2099的範圍內)
unsigned char month:1 to 12
無符號字符天:1〜31
無符號字符小時:0到23
無符號字符分鐘:0到59
無符號字符第二:0到59
我想對dt2ts轉換器有第二意見(假設輸入是合法的):
unsigned int dt2ts(const dt_t* dt)
{
static unsigned short days[] = {0,31,59,90,120,151,181,212,243,273,304,334};
return ((((dt->year*365+dt->year/4)+days[dt->month-1]+dt->day)*24+dt->hour)*60+dt->minute)*60+dt->second;
}
除此之外,我將不勝感激一些幫助完成ts2dt轉換器:
void ts2dt(unsigned int ts,dt_t* dt)
{
dt->second = ts%60; ts /= 60;
dt->minute = ts%60; ts /= 60;
dt->hour = ts%24; ts /= 24;
dt->day = ?????;
dt->month = ?????;
dt->year = ?????;
}
感謝
讓我們希望這是一個練習,你不只是創建一個Y2100的錯誤。 :-)你在乎夏令時嗎?你肯定需要考慮閏年,當時有2月29日。 – torek
http://pubs.opengroup.org/onlinepubs/000095399/functions/gmtime.html – Mat
爲什麼你試圖把所有的代碼放在一行?它不是Perl或Python。這種「風格」確實很難讀懂。 – JIghtuse