Конвертировать время / дату в эпоху (секунды с 1970 года) - PullRequest
0 голосов
/ 24 мая 2011

Я пытаюсь написать функцию для преобразования времени и даты в секунды эпохи, это для небольшой системы, которая не имеет обычных библиотечных функций 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;
}

1 Ответ

2 голосов
/ 24 мая 2011

Возможно, одна ошибка, которую вы не учитываете, добавляете ли вы високосные дни до 29 февраля или нет.Но я не уверен, что это единственная ошибка.

РЕДАКТИРОВАТЬ: я думаю, что нашел вторую ошибку: вы добавляете весь день в дни.Вы должны добавить день - 1 к дням, так как 08:00 1 января - это только 8 часов с начала месяца, а не 24 + 8 часов с него.

...