6.时间戳与时间


1.简介

时间戳简单来说就是时间替换成的秒数。

2.应用

2.1 时间转换为时间戳

给出代码即可,不做过多介绍。

.h文件内容:

#ifndef _mktime_h_
#define _mktime_h_


struct tm {
    int tm_sec;         /* seconds */
    int tm_min;         /* minutes */
    int tm_hour;        /* hours */
    int tm_mday;        /* day of the month */
    int tm_mon;         /* month */
    int tm_year;        /* year */
    int tm_wday;        /* day of the week */
    int tm_yday;        /* day in the year */              
    int tm_isdst;       /* daylight saving time */
};

#endif

.c文件内容:

#include "mktime.h"

#define MINUTE 60
#define HOUR (60*MINUTE)
#define DAY (24*HOUR)
#define YEAR (365*DAY)



/* interestingly, we assume leap-years */
static int month[12] = {                //--每月初所经过的秒数
    0,
    DAY*(31),
    DAY*(31+29),
    DAY*(31+29+31),
    DAY*(31+29+31+30),
    DAY*(31+29+31+30+31),
    DAY*(31+29+31+30+31+30),
    DAY*(31+29+31+30+31+30+31),
    DAY*(31+29+31+30+31+30+31+31),
    DAY*(31+29+31+30+31+30+31+31+30),
    DAY*(31+29+31+30+31+30+31+31+30+31),
    DAY*(31+29+31+30+31+30+31+31+30+31+30)
};


long kernel_mktime(struct tm * tm)
{
    long res;
    int year;
    year = tm->tm_year - 70;                            //--年数
        /* magic offsets (y+1) needed to get leapyears right.*/
    res = YEAR*year + DAY*((year+1)/4);                    //--年数+闰年数
    res += month[tm->tm_mon];                            //--月
        /* and (y+2) here. If it wasn't a leap-year, we have to adjust */
    if (tm->tm_mon>1 && ((year+2)%4))                    //--若(y+2)不是闰年,则减一天
        res -= DAY;
    res += DAY*(tm->tm_mday-1);                            //--当月已经过的天数
    res += HOUR*tm->tm_hour;                            //--当天已经过的小时数
    res += MINUTE*tm->tm_min;                            //--此时已经过的分钟
    res += tm->tm_sec;                                    //--此分已经过的秒
    return res;
}

注意时间戳不是按照当地的时间来算的,而是有一个基准:格林威治时间,它属于UTC 0 (GMT),而我们是属于东八区,所以一般根据我们的时间算出来的时间戳需要减去8个小时的偏差才是真正的格林威治时间转换过来的时间戳。

因此,如果是数据上传到云平台,只需要上传unix时间戳即可,后面的时区只需要云平台去关注就好。

3.多说一句

如果用的是keil,工具本身是包含mktime()的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。