日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 單片機 > 電子電路開發(fā)學(xué)習(xí)
[導(dǎo)讀]什么是時間戳 準(zhǔn)確的說,應(yīng)該是unix時間戳,是從1970年1月1日(UTC/GMT的午夜)開始所經(jīng)過的秒數(shù),不考慮閏秒。一個小時表示為UNIX時間戳格式為:3600秒;一天表示為UNIX時間戳為86400秒,閏秒不計算。在很多API接口中,數(shù)據(jù)的更新時間并不是一個字符串,而是

什么是時間戳

準(zhǔn)確的說,應(yīng)該是unix時間戳,是從1970年1月1日(UTC/GMT的午夜)開始所經(jīng)過的秒數(shù),不考慮閏秒。一個小時表示為UNIX時間戳格式為:3600秒;一天表示為UNIX時間戳為86400秒,閏秒不計算。在很多API接口中,數(shù)據(jù)的更新時間并不是一個字符串,而是一個長整形數(shù)據(jù),如1593003485,表示是北京時間2020-06-24 20:58:05。

注意這里直接換算出的是北京時間,如果用時間戳直接轉(zhuǎn)換的話,得到的時間UTC/GMT時間,和北京時間相差8個小時,在原始時間戳加上8個小時再進(jìn)行轉(zhuǎn)換就是北京時間了。大部分時間戳是以秒為單位的,有的時間戳是以毫秒為單位的。

在線轉(zhuǎn)換工具:tool.lu/timestamp/

在線轉(zhuǎn)換

下面介紹在Keil環(huán)境下,或者是C語言環(huán)境下,利用 time.h頭文件中的兩個函數(shù)實現(xiàn)UNIX時間戳和標(biāo)準(zhǔn)北京時間之間的轉(zhuǎn)換方法。

頭文件time.h介紹

如果使用C庫函數(shù)進(jìn)行轉(zhuǎn)換,使用之前先要包含對應(yīng)的頭文件:

#include <time.h>

頭文件中有一個比較重要的結(jié)構(gòu)體:

/* 時間戳類型,單位為秒,與uint32_t類型一樣 */
typedef unsigned int time_t;     

struct tm {
    int tm_sec;   /* 秒鐘,范圍0-60,偶爾的閏秒 */
    int tm_min;   /* 分鐘,范圍0-59 */
    int tm_hour;  /* 小時,范圍0-23*/
    int tm_mday;  /* 日,范圍1-31 */
    int tm_mon;   /* 月份,范圍0-11 */
    int tm_year;  /* 年份,自從1900年 */
    int tm_wday;  /* 星期,范圍0-6 */
    int tm_yday;  /* 一年的第幾天,范圍0-365 */
    int tm_isdst; /* 夏令時標(biāo)志 */
};

這里,我們要注意幾個時間的修正:

/*
年份自1900算起,轉(zhuǎn)換為實際年份,要+1900
月份范圍0-11,轉(zhuǎn)換為實際月份,要+1
星期范圍0-6,轉(zhuǎn)換為實際星期,要+1
*/

三個函數(shù):

struct tm * localtime(const time_t *);
/* 給定一個毫秒級時間戳,返回時間結(jié)構(gòu)體 */

time_t mktime(struct tm *);
/*
給定一個初始化完成的時間結(jié)構(gòu)體,返回一個毫秒級時間戳,
轉(zhuǎn)換時不考慮tm結(jié)構(gòu)的tm_wday和tm_yday,僅用tm_mday來決定日期。
*/


size_t strftime(char *strDest, size_t maxsize, const char *format, const struct tm *timeptr);
/*
給定一個時間結(jié)構(gòu)體,格式化輸出字符串,格式化字符可參考
https://baike.baidu.com/item/strftime
*/


/*
示例:
char str[100];
strftime(str, 100, "%F %T", time);  /* 2020-07-01 02:16:51 */

strftime(str, 100"%m-%d %H:%M", time);  /* 06-30 22:16 */
printf("%s\n", str);
*/

UNIX時間戳轉(zhuǎn)北京時間

輸入毫秒級時間戳,調(diào)用系統(tǒng)函數(shù),把時間戳轉(zhuǎn)換為UTC時間,為了得到北京時間,在轉(zhuǎn)換之前要先加上8個小時的補償時間:

#include "time.h"
.....
int main(void)
{
    char str[100];
    struct tm *time;
    uint16_t year, yday;
    uint8_t month, day, week, hour, minute, second;
    time_t timestamp = 1592932611;  /*北京時間2020-06-24 01:16:51*/
/*
    幾個用于測試的時間戳和北京時間對應(yīng)
    1592932611 = 2020-06-24 01:16:51(北京時間) 
    1593541011 = 2020-07-01 02:16:51
    1593526611 = 2020-06-30 22:16:51
*/
    

    uart_init(115200);    /*printf通過串口輸出*/
    /* 北京時間補償 */
    timestamp += 8*60*60;
    /* 調(diào)用系統(tǒng)函數(shù) */
    time = localtime(&timestamp);

    year = time->tm_year;   /* 自1900年算起 */
    month = time->tm_mon;   /* 從1月算起,范圍0-11 */
    week = time->tm_wday;   /* 從周末算起,范圍0-6 */
    yday = time->tm_yday;  /* 從1月1日算起,范圍0-365 */
    day = time->tm_mday;    /* 日: 1-31 */
    hour = time->tm_hour;   /* 小時:0-23點,UTC+0時間 */
    minute = time->tm_min;  /* 分鐘:0-59 */
    second = time->tm_sec;  /* 0-60,偶爾出現(xiàn)的閏秒 */

    /* 時間校正 */
    year += 1900;
    month += 1;
    week += 1;

    printf("UNIX時間戳:%d\r\n", timestamp);
    printf("日期:%d-%d-%d 第%d天 星期%d 時間:%d:%d:%d\r\n",
        year, month, day, yday, week, hour, minute, second);

    /* 格式化時間字符串 */
    strftime(str, 100"%F %T", time);  /* 2020-07-01 02:16:51 */
//    strftime(str, 100, "%m-%d %H:%M", time);  /* 06-30 22:16 */
    printf("%s\r\n", str);

    while(1)
    {
        ;
    }
}

運行結(jié)果:

運行結(jié)果

北京時間轉(zhuǎn)UNIX時間戳

給定北京時間:2020-06-24 01:16:51輸出時間戳1592932611,北京時間先轉(zhuǎn)為UTC8時間戳,再去掉8個小時,轉(zhuǎn)為標(biāo)準(zhǔn)的UNIX時間戳。

#include "time.h"
.....

int main(void)
{
    struct tm time;
    time_t timestamp;

    /* 2020-6-25 19:11:50 */
    uint16_t str[6] = {2020625191150};

    uart_init(115200);    /*printf通過串口輸出*/

    time.tm_year = str[0] - 1900;    /* 年份修正 */
    time.tm_mon = str[1] - 1;        /* 月份修正 */
    time.tm_mday = str[2];
    time.tm_hour = str[3];
    time.tm_min = str[4];
    time.tm_sec = str[5];

    /* 去掉北京時間8個小時 */
    timestamp = mktime(&time) - 8*60*60;    
    /*1593083510 = 2020-6-25 19:11:50*/
    printf("%d\r\n", timestamp);    

    while(1)
    {
        ;
    }
}

寫成函數(shù)和調(diào)用示例

#include "usart.h"
#include "time.h"

/* 定義結(jié)構(gòu)體,時間為北京時間格式 */
typedef struct{
    uint16_t year;
    uint8_t month;
    uint8_t day;
    uint8_t hour;
    uint8_t minute;
    uint8_t second;
}bj_time;

bj_time timestamp_to_bj_time(time_t timestamp);
time_t bj_time_to_timestamp(bj_time time);

int main(void)
{
    time_t timestamp;
    bj_time time;

    uart_init(115200);

    timestamp = 1593083510;
    printf("%d\r\n", timestamp);

    /* 時間戳轉(zhuǎn)北京時間 */
    time = timestamp_to_bj_time(timestamp);
    /* 2020-6-25 19:11:50 */
    printf("%d-%d-%d %d:%d:%d\r\n",
        time.year, time.month, time.day, time.hour, time.minute, time.second);

    /* 北京時間轉(zhuǎn)時間戳 */
    timestamp = bj_time_to_timestamp(time);
    printf("%d\r\n", timestamp);

    while(1)
    {
        ;
    }
}

bj_time timestamp_to_bj_time(time_t timestamp)
{
    bj_time time;

    struct tm *t;

    /* 加上8個小時 */
    timestamp += 8*60*60;
    t = localtime(&timestamp);

    /* 日期修正 */
    time.year = t->tm_year + 1900;
    time.month = t->tm_mon + 1;
    time.day = t->tm_mday;
    time.hour = t->tm_hour;
    time.minute = t->tm_min;
    time.second = t->tm_sec;

    return time;
}

time_t bj_time_to_timestamp(bj_time time)
{
    struct tm t;
    time_t timestamp = 0;

    /* 日期修正 */
    t.tm_year = time.year - 1900;
    t.tm_mon = time.month - 1;
    t.tm_mday = time.day;
    t.tm_hour = time.hour;
    t.tm_min = time.minute;
    t.tm_sec = time.second;

    timestamp = mktime(&t) - 8*60*60;
    return timestamp;
}

運行結(jié)果:

運行結(jié)果

推薦閱讀


  • 我的博客:www.wangchaochao.top

  • 我的公眾號:mcu149

由于微信文章不支持超鏈接,文中出現(xiàn)的軟件、程序等文件下載,可以點擊" 閱讀原文 ",跳轉(zhuǎn)到我的博客文章進(jìn)行下載。

如果覺得我的文章對你有所幫助,可以隨手點“ 好看 ”分享,你的支持將是我持續(xù)更新的動力。

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當(dāng)下,工業(yè)電機作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設(shè)計中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計成為提升電機驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設(shè)計、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉