【问题标题】:Convert time/date to epoch (seconds since 1970)将时间/日期转换为纪元(自 1970 年以来的秒数)
【发布时间】:2011-08-31 14:32:02
【问题描述】:

我正在尝试编写一个将时间和日期转换为纪元秒的函数,它适用于没有通常的 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;
}

【问题讨论】:

    标签: date time epoch


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-19
      • 1970-01-01
      • 2023-01-08
      • 2013-08-19
      • 1970-01-01
      • 2016-08-12
      • 2013-01-20
      • 2017-02-19
      相关资源
      最近更新 更多