计算当前时间距离1970年的秒数

简介: 计算当前时间距离1970年的秒数

最近业务需要计算某个时间点距离1970年1月1日的秒数,以下是两种实现:

第一种:

#define is_leap_year(y) (((y) % 4  == 0 && (y) % 100 != 0) || (y) % 400 == 0)
/* 计算某个日期距1970年1月1日0时0分0秒的秒数 */
time_t calSecSince1970(int Y, int M, int D, int h, int m, int s)
{
    int i = 0;
    int sec = 0;
    int days[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    /* 年计算 */
    for(i = 1970; i < Y; i++)
    {
        if(is_leap_year(i))
            sec += 366 * 24 * 60 * 60;
        else
            sec += 365 * 24 * 60 * 60;
    }
    /* 月计算 */
    for(i = 1; i < M; i++)
    {
        sec += days[i] * 24 * 60 * 60;
        if(i == 2 && is_leap_year(Y))
        {
            sec += 24 * 60 * 60;
        }
    }
    /* 天计算 */
    sec += (D - 1) * 24 * 60 * 60;
    /* 时分秒计算 */
    sec += h * 60 * 60 + m * 60 + s;
    return sec;
}

第二种

linux源码实现,只能说流批,有兴趣的小伙伴可以研究下:

unsigned long mktime (unsigned int year, unsigned int mon,
    unsigned int day, unsigned int hour,
    unsigned int min, unsigned int sec)
{
    if (0 >= (int) (mon -= 2)){    /**//* 1..12 -> 11,12,1..10 */
         mon += 12;      /**//* Puts Feb last since it has leap day */
         year -= 1;
    }
    return (((
             (unsigned long) (year/4 - year/100 + year/400 + 367*mon/12 + day) +
             year*365 - 719499
          )*24 + hour /**//* now have hours */
       )*60 + min /**//* now have minutes */
    )*60 + sec; /**//* finally seconds */
}


相关文章
|
9月前
|
Java
计算时间差(天,小时,分钟)
计算时间差(天,小时,分钟)
74 0
|
8月前
7-1 时间换算(15分)
本题要求编写程序,以hh:mm:ss的格式输出某给定时间再过n秒后的时间值(超过23:59:59就从0点开始计时)。
83 0
|
8月前
|
前端开发
时间秒转换为毫秒
时间秒转换为毫秒
49 0
|
10月前
|
算法 Python
通过初始时间和流逝的分钟数计算终止时间
通过初始时间和流逝的分钟数计算终止时间
60 0
将毫秒换算成天、时、分、秒
将毫秒换算成天、时、分、秒
C# 计算两个日期的时间间隔
C# 计算两个日期的时间间隔
564 0
|
算法 SQL
夏至日计算公式及“三伏”的日期算法问题
原文:夏至日计算公式及“三伏”的日期算法问题 今天是6月21日,农历夏至日,这一天为一年中白天最长,晚上最短。 夏至日为二十四节气中最早确定下来的农历节气,为每年公历的6月20日、21、22日中的一天。
1077 0