2011-05-24 110 views
0

我試圖編寫一個函數來將日期時間&轉換爲紀元秒,它適用於沒有通常的time_t庫函數的小型系統。我已經得到了下面的代碼,但是計算結果有點偏離,任何人都可以看到有什麼問題嗎?將時間/日期轉換爲紀元(自1970年以來的秒數)

long getSecondsSinceEpoch(int h, int m, int s, int day, int month, int year) { 
    int i,leapDays; 
    long days; 
    long seconds; 

    const static DAYS_IN_MONTH[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; 

    leapDays = 0; 
    days = (year - 1970) * 365; 

    for (i = year; i>1970; i--){ 
     if ((i%4)==0) { 
      leapDays++; 
     } 
    } 
    days += leapDays; 
    for (i = 1;i < month;i++) { 
     days += DAYS_IN_MONTH[i - 1]; 
    } 
    days += day; 
    seconds = days * 86400; 

    seconds += (h * 3600); 
    seconds += (m * 60); 
    seconds += s; 

    return seconds; 
} 

回答

2

一個錯誤可能是,如果您是在2月29日之前或沒有添加閏日,則不考慮。但我不確定這是否是唯一的錯誤。

編輯:我想我找到了第二個錯誤:您將整天添加到天。你應該增加第一天到第幾天,因爲1月1日的08:00只是從月初開始8小時,而不是24 + 8小時。

相關問題