• 435查看
  • 0回复

[应用层软件] 工程问题——Unix与UTC时间戳互转

[复制链接]

  • TA的每日心情
    无聊
    1-7-2015 18:46
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 21-1-2024 13:39:35 | 显示全部楼层 |阅读模式

    汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


    01

    背景介绍
    在汽车软件工程中,各个控制器之间或控制器内部中,通常都会使用时间同步来确保通讯的实时性。不过本篇先介绍一下Unix2UTC吧。

    02

    Unix、UTC介绍

    Unix时间戳(Unix Timestamp)是一种在计算机系统中广泛使用的表示时间的简单方法。它从协调世界时(UTC)1970年1月1日0点0分0秒开始计数,以零时刻为基准,记录从这个时刻起到现在所经过的秒数。由于不考虑闰秒调整,因此严格来说,Unix时间戳反映的是基于国际原子时的时间增量,而不是地球自转的真实时间。UTC(Coordinated Universal Time),即协调世界时,是目前全球通用的时间标准。它是基于原子钟测量得到的非常精确的时间尺度,并通过不规则插入闰秒的方式与地球自转相协调,以尽量保持与地球上的平均太阳时(UT1)一致。UTC的时间表示方式包含年(y)、月(m)、日(d)、时(h)、分(min)和秒(s)。在实际应用中,Unix时间戳常被用于编程语言、数据库和其他计算环境中,提供一种易于存储、比较和转换的标准时间格式。而UTC则是在全球通信、航空、航海、科研等领域作为统一时间基准使用。当处理Unix时间戳时,通常假定其对应的时间是按照UTC进行计算的。

    03

    还记得吗
    “整个走廊就你们班最乱!”
    “你们是我带过最差的一届!”大家还记得闰(老)年(师)的(的)规(教)则(诲)吗?在公历(格里高利历)中,闰年的判断规则如下:1.公历年份可以被4整除但不能被100整除的年份是闰年。2.能够被400整除的年份也是闰年。

    04

    普通转换方式

    当然我们先贴一下普通的转换方式,完全按照规则来一行一行、一年一月一日一时一分一秒解析:

    1

    Unix2UTC

    工程问题——Unix与UTC时间戳互转w1.jpg

    2

    UTC2Unix

    工程问题——Unix与UTC时间戳互转w2.jpg

    05

    C语言time库
    那么肯定还是有更简便高效的方法的,C语言就给我们提供了time库。简单介绍一下:

    在C语言中,<time.h> 头文件提供了处理时间和日期的函数及数据结构。其中最重要的数据结构是 struct tm,它用来表示特定的时间点。

    c

    #include <time.h>

    // 结构体定义:
    struct tm {
        int tm_sec;     // 秒,范围通常从 0 到 59,但可能为60(闰秒)
        int tm_min;     // 分钟,范围从 0 到 59
        int tm_hour;    // 小时,范围通常从 0 到 23
        int tm_mday;    // 一个月中的第几天,范围从 1 到 31
        int tm_mon;     // 月份,范围从 0 到 11 (0 表示一月,1 表示二月,以此类推)
        int tm_year;    // 年份,相对于1900年,例如:tm_year = 123 表示 2023年
        int tm_wday;    // 星期几,范围从 0 到 6 (0 表示星期日,1 表示星期一,以此类推)
        int tm_yday;    // 一年中的第几天,范围从 0 到 365
        int tm_isdst;   // 夏令时标志,正数表示处于夏令时期间,0表示非夏令时,负数表示信息未知
    };

    快速发帖

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

    GMT+8, 1-2-2025 13:08 , Processed in 0.235091 second(s), 31 queries .

    Powered by Discuz! X3.5

    © 2001-2013 Comsenz Inc.