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

一个错误可能是,您在添加闰日时没有考虑到您是否在 2 月 29 日之前。但我不确定这是否是唯一的错误。

编辑:我想我发现了第二个错误:你整天都在加。您应该将 day - 1 添加到 days 中,因为 1 月 1 日的 08:00 距离月初只有 8 小时,而不是 24+8 小时。

于 2011-05-24T02:59:50.813 回答