0

時刻と日付をエポック秒に変換する関数を作成しようとしています。これは、通常の time_t ライブラリ関数を持たない小さなシステム用です。このコードを以下に示しますが、計算が少しずれています。何が問題なのか誰にもわかりますか?

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;
}
4

1 に答える 1

2

1 つのエラーは、うるう日を追加するときに 2 月 29 日より前かどうかを考慮していないことです。しかし、これが唯一の間違いかどうかはわかりません。

編集:2番目のエラーを見つけたと思います:あなたは一日中一日を追加します。1 月 1 日の 08:00 は月初からわずか 8 時間であり、月初から 24+8 時間ではないため、day - 1 を day に追加する必要があります。

于 2011-05-24T02:59:50.813 に答える