计算当前时间距离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 */
}


相关文章
|
Ubuntu 开发工具 git
Ubuntu安装homebrew的完整教程
本文介绍了如何在没有公网的情况下安装 Homebrew。首先访问 Homebrew 官网,然后通过阿里云的镜像克隆安装脚本,并创建普通用户进行安装。接着修改 `install.sh` 文件指向国内镜像,执行安装命令。最后配置环境变量并更换 Homebrew 源为国内镜像,确保安装顺利。
2280 50
|
人工智能 算法 决策智能
面向软件工程的AI智能体最新进展,复旦、南洋理工、UIUC联合发布全面综述
【10月更文挑战第9天】近年来,基于大型语言模型(LLM)的智能体在软件工程领域展现出显著成效。复旦大学、南洋理工大学和伊利诺伊大学厄巴纳-香槟分校的研究人员联合发布综述,分析了106篇论文,探讨了这些智能体在需求工程、代码生成、静态代码检查、测试、调试及端到端软件开发中的应用。尽管表现出色,但这些智能体仍面临复杂性、性能瓶颈和人机协作等挑战。
407 1
|
IDE 安全 Java
Lombok的优缺点不建议使用
Lombok的优缺点不建议使用
737 1
|
传感器 Ubuntu Java
ESP-IDF 蓝牙开发实战 — 传感器数据上传及手机控制开发板
ESP32-C3 蓝牙部分我们学习了GATT,本文博主手把手带领大家使用 ESP32-C3的蓝牙做一个简单的小应用。
2277 0
ESP-IDF 蓝牙开发实战 — 传感器数据上传及手机控制开发板
|
算法 数据可视化 数据挖掘
深入解析力扣162题:寻找峰值(线性扫描与二分查找详解)
深入解析力扣162题:寻找峰值(线性扫描与二分查找详解)
|
机器学习/深度学习 并行计算 编译器
MXNet安装教程:详细步骤与常见问题解析
【4月更文挑战第12天】本文详细介绍了MXNet深度学习框架的安装步骤,包括Python、conda和R用户的安装方法,以及GPU支持的选项。在安装过程中可能遇到网络问题、依赖冲突和GPU支持问题等,文中给出了相应解决策略。安装后,通过简单的代码示例验证MXNet是否正常工作,从而顺利完成本地环境搭建。
2481 7
|
Unix
UTC时间戳与北京时间转换
UTC时间戳与北京时间转换
1242 2
|
机器学习/深度学习 人工智能 算法
免费背景音人声分离解决方案MVSEP-MDX23,足以和Spleeter分庭抗礼
在音视频领域,把已经发布的混音歌曲或者音频文件逆向分离一直是世界性的课题。音波混合的物理特性导致在没有原始工程文件的情况下,将其还原和分离是一件很有难度的事情。 言及背景音人声分离技术,就不能不提Spleeter,它是一种用于音频源分离(音乐分离)的开源深度学习算法,由Deezer研究团队开发。使用的是一个性能取向的音源分离算法,并且为用户提供了已经预训练好的模型,能够开箱即用,这也是Spleeter泛用性高的原因之一,关于Spleeter,请移步:[人工智能AI库Spleeter免费人声和背景音乐分离实践(Python3.10)](https://v3u.cn/a_id_305),这里
免费背景音人声分离解决方案MVSEP-MDX23,足以和Spleeter分庭抗礼
|
Ubuntu Linux
ffmpeg编译x265
ffmpeg编译x265
917 0
ffmpeg编译x265
|
存储 缓存 人工智能
云架构师进阶攻略(完整版)-1
云架构师进阶攻略(完整版)
503 0
云架构师进阶攻略(完整版)-1
下一篇
oss云网关配置