娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年09月02日(星期一)

正在發生

2019年09月02日 | STM32開發 -- UTC、UNIX時間戳、北京時間之間的轉換

發布者:翠綠山水 來源: eefocus關鍵字:STM32  UTC  UNIX時間戳  北京時間  轉換 手機看文章 掃描二維碼
隨時隨地手機看文章

我碰到的問題,GPS上UTC時間轉北京時間和STM32上UNIX時間戳轉北京時間。

這部分之前講RTC和GPS的時候有涉及到一部分。

具體的RTC如何得到UNIX時間戳,和GNRMC如何解析得到UTC時間可以參看一下。

參看:STM32開發 – RTC詳解

參看:STM32開發 – GPS模塊開發詳解


擴展:C語言再學習 – 時間函數


這里主要看三者轉換方法:


一、UTC時間轉換為北京時間

參看:UTC時間轉換為北京時間


時間類型結構體


//UTC時間信息

__packed typedef struct  

{     

  uint16_t year; //年份

uint8_t month; //月份

uint8_t date; //日期

uint8_t hour; //小時

uint8_t min; //分鐘

uint8_t sec; //秒鐘

}nmea_time;


UTC時間轉任意時區時間


其中,北京時間 = UTC time + 8 hours


void UTC_to_BJtime(nmea_time* utc_time, int8_t timezone)

{

int year,month,day,hour;

    int lastday = 0; //last day of this month

    int lastlastday = 0; //last day of last month


    year = utc_time->year; //utc time

    month  = utc_time->month;

    day = utc_time->date;

    hour = utc_time->hour + timezone; 

    if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12){

        lastday = 31;

        if(month == 3){

            if((year%400 == 0)||(year%4 == 0 && year%100 != 0)) //if this is lunar year

                lastlastday = 29;

            else

                lastlastday = 28;

        }

        if(month == 8)

            lastlastday = 31;

    }

    else if(month == 4 || month == 6 || month == 9 || month == 11){

        lastday = 30;

        lastlastday = 31;

    }

    else{

        lastlastday = 31;

        if((year%400 == 0)||(year%4 == 0 && year%100 != 0))

            lastday = 29;

        else

            lastday = 28;

    }


    if(hour >= 24){ // if >24, day+1

            hour -= 24;

            day += 1; 


            if(day > lastday){ // next month,  day-lastday of this month

                day -= lastday;

                month += 1;


                if(month > 12){ // next year , month-12

                    month -= 12;

                    year += 1;

                }

            }

        }

    if(hour < 0){ // if <0, day-1

            hour += 24;

            day -= 1; 

            if(day < 1){   // month-1, day=last day of last month

                day = lastlastday;

                month -= 1;

                if(month < 1){ // last year , month=12

                    month = 12;

                    year -= 1;

                }

            }

        }

   // transfer value to NMEA_result.local_time

NMEA_result.local_time.year  = year;

NMEA_result.local_time.month = month;

NMEA_result.local_time.date  = day;

NMEA_result.local_time.hour  = hour;

NMEA_result.local_time.min = utc_time->min;

NMEA_result.local_time.sec = utc_time->sec;

}


二、UNIX Time 時間戳 與 北京時間 相互轉換

參看:UNIX Time 時間戳 與 北京時間 相互轉換


typedef struct t_xtime {

  int year; int month;  int day;  

  int hour; int minute;  int second;

} _xtime ;

 

#define xMINUTE   (60             ) //1分的秒數

#define xHOUR      (60*xMINUTE) //1小時的秒數

#define xDAY        (24*xHOUR   ) //1天的秒數

#define xYEAR       (365*xDAY   ) //1年的秒數


1、將localtime(UTC+8北京時間)轉為UNIX TIME,以1970年1月1日為起點

unsigned int  xDate2Seconds(_xtime *time)

{

  static unsigned int  month[12]={

    /*01月*/xDAY*(0),

    /*02月*/xDAY*(31),

    /*03月*/xDAY*(31+28),

    /*04月*/xDAY*(31+28+31),

    /*05月*/xDAY*(31+28+31+30),

    /*06月*/xDAY*(31+28+31+30+31),

    /*07月*/xDAY*(31+28+31+30+31+30),

    /*08月*/xDAY*(31+28+31+30+31+30+31),

    /*09月*/xDAY*(31+28+31+30+31+30+31+31),

    /*10月*/xDAY*(31+28+31+30+31+30+31+31+30),

    /*11月*/xDAY*(31+28+31+30+31+30+31+31+30+31),

    /*12月*/xDAY*(31+28+31+30+31+30+31+31+30+31+30)

  };

  unsigned int  seconds = 0;

  unsigned int  year = 0;

  year = time->year-1970;       //不考慮2100年千年蟲問題

  seconds = xYEAR*year + xDAY*((year+1)/4);  //前幾年過去的秒數

  seconds += month[time->month-1];      //加上今年本月過去的秒數

  if( (time->month > 2) && (((year+2)%4)==0) )//2008年為閏年

    seconds += xDAY;            //閏年加1天秒數

  seconds += xDAY*(time->day-1);         //加上本天過去的秒數

  seconds += xHOUR*time->hour;           //加上本小時過去的秒數

  seconds += xMINUTE*time->minute;       //加上本分鐘過去的秒數

  seconds += time->second;               //加上當前秒數
 seconds -= 8 * xHOUR;

  return seconds;

}


2、將UNIX時間轉為UTC+8 即北京時間

//UNIX轉為UTC 已進行時區轉換 北京時間UTC+8

void xSeconds2Date(unsigned long seconds,_xtime *time )

{

    static unsigned int month[12]={

        /*01月*/31, 

        /*02月*/28, 

        /*03月*/31, 

        /*04月*/30, 

        /*05月*/31, 

        /*06月*/30, 

        /*07月*/31, 

        /*08月*/31, 

        /*09月*/30, 

        /*10月*/31, 

        /*11月*/30, 

        /*12月*/31 

    };

    unsigned int days; 

    unsigned short leap_y_count; 

    time->second      = seconds % 60;//獲得秒 

    seconds          /= 60; 

    time->minute      =  seconds % 60;//獲得分 

    seconds          += 8 * 60 ;        //時區矯正 轉為UTC+8 bylzs

    seconds          /= 60; 

    time->hour        = seconds % 24;//獲得時 

    days              = seconds / 24;//獲得總天數 

    leap_y_count = (days + 365) / 1461;//過去了多少個閏年(4年一閏) 

    if( ((days + 366) % 1461) == 0) 

    {//閏年的最后1天 

        time->year = 1970 + (days / 366);//獲得年 

        time->month = 12;              //調整月 

        time->day = 31; 

        return; 

    } 

    days -= leap_y_count; 

    time->year = 1970 + (days / 365);     //獲得年 

    days %= 365;                       //今年的第幾天 

    days = 01 + days;                  //1日開始 

    if( (time->year % 4) == 0 ) 

    { 

        if(days > 60)--days;            //閏年調整 

        else 

        { 

            if(days == 60) 

            { 

                time->month = 2; 

                time->day = 29; 

                return; 

            } 

        } 

    } 

    for(time->month = 0;month[time->month] < days;time->month++) 

    { 

        days -= month[time->month]; 

    } 

    ++time->month;               //調整月 

    time->day = days;           //獲得日 

}


3、UTC(字符串)轉UNIX時間

/*******************************************************************************

* Function Name  : ConvertTimeToSecond

* Description    : Convert GPS Date to Log buffer.

* Input          : @date: format 'DDMMYY,HHMMSS.SSS'

* Output         : None

* Return         : Sencod

*******************************************************************************/

static u32 ConvertDateToSecond(const u8 *date)

{

u32 sencods = 0;

u16 temp = 1970;

u16 days = 0;

if(NULL == date) {

return 0;

}

//year

temp = (date[4] - 0x30) * 10 + (date[5] - 0x30) + 2000;

if(0 == (temp % 4)) {

days += 1;

}

temp -= 1;

//UTC time start 1970

for(; temp >= 1970; temp--) {

if(temp % 4) {

days += 365;

} else {

//leap year

days += 366;

[1] [2]
關鍵字:STM32  UTC  UNIX時間戳  北京時間  轉換 引用地址:STM32開發 -- UTC、UNIX時間戳、北京時間之間的轉換

上一篇:STM32開發 -- 看門狗詳解
下一篇:STM32開發 -- 外部中斷詳解

推薦閱讀

? ?暑期即將結束,此時也是各大賣場最為紅火之時,選購一款手機也自然成為了學生一族的“頭等大事”。而隨著社交軟件的興起,拍照能力的好壞也成為部分消費者選購手機的主要標準。面對令人眼花繚亂的機型和高大上的參數宣傳,想必也讓很多消費者難以抉擇。單從手機攝像頭的像素來說,高像素并不一定代表高成像質量,手機的成像質量也與相機傳感器類型、...
8月22日,向來低調的兆易創新(GigaDevice)在北京召開了一場盛大的、主題為“智領全球,芯動未來”的發布會,這次會議的主角是:基于RISC-V內核的32位通用MCU——GD32V系列。新品一經發布,技術微信群便自發開啟了討論模式:“RISC-V 芯片量產了?”“是不是和兆易F103系列引腳兼容啊?底層庫兼容嗎?”“期待,兆易速度真快!一整套開發環境,還有那么...
最近一項使用Weebit納米硅氧化物(SiOx)的ReRAM技術的研究描繪了一種大腦啟發的人工智能(AI)系統,它可以執行無監督的學習任務,并獲得高精度結果。 這項工作是由米蘭理工大學的研究人員完成,并在最近與該公司的聯合論文中提出,該論文詳細介紹了基于Weebit的SiOx ReRAM的新型人工智能自學習演示。閃存技術被認為是取代NAND技術的主要候選者,因為它的速...
  防爆電機調速原理  調速電機的實質是基于功率控制。功率控制原則有種,一種是電磁功率控制,所改變的是電機理想空載轉速,調速是高效率的節能調速;另一種是損耗功率控制,增大電機轉速降,調速是低效率、耗能型調速。電機轉速普遍表達為理想空載轉速與轉速降之差,所有電機調速方法都歸結于功率控制原理之中,或是從屬電磁功率控制原則,或是從屬損...

史海拾趣

問答坊 | AI 解惑

s3c2440,就快退出市場了

因為它的市場越來越小 當原來的高端成為中端,那么原來的中端就會慢慢消失 就跟P4會取代P3,雙核會取代單核一樣…

查看全部問答∨

“你真是機器人他親媽”

如題,今天一個女孩如是對我說 覺得挺好玩的 假期在學校里面做機器人呢,17舵機的雙足機器人,主要是做機器人劇場賽的 我們組做了兩個人一條蛇 怪就怪在這幾個機器人調試的過程中只要我小小在他們就好好的,我一離開就出事%…… 不是舵機里面 ...…

查看全部問答∨

lpc1343 spi 讀寫rc531時序問題

我按照手冊的時序來寫了2個讀寫函數。但是讀寫的數據總是不對。 我網上找了很多相關資料,感覺他們的操作時序跟我一樣的呀。 我設置的是8位,CPOL=0,CPHA=0。 下面是操作的函數,望有人幫忙分析下。   /******************************** ...…

查看全部問答∨

奚國華:盡快研究解決物聯網的內涵、產業界定

工信部副部長奚國華6月底在北京舉行“2010中國物聯網大會”上表示,工業和信息 化部副部長奚國華在致辭時表示,對于物聯網,工信部將加強規劃指導和政策引導,加強指導協調,盡快研究解決物聯網的內涵,產業界定和產業統計的問題。同時 將超 ...…

查看全部問答∨

做硬件或嵌入式開發都具體做些什么事?有些什么要求?

學電子技術的,畢業后一直做軟件開發,現在想重新做硬件或嵌入式開發,想問一下大家, 1、大家在公司做硬件或嵌入式開發都具體做些什么事??? 2、做硬件或嵌入式開發現在有些什么要求、或有些什么必須掌握的技能??? 希望大家幫助解答一下! ...…

查看全部問答∨

菜鳥求救~~Wince中html文件的解析

需要做個窗口顯示網頁 本來想用Iwebbrowser2 ,結果SDK中沒有關鍵的piedocvw.lib Htmlcrl,SDK中有mshtml.h, mshtml.idl 卻沒有mshtml.dll.......... 這該怎么弄?? 還有別的方法嗎? 現在我想自己解析html文件,有沒有什么現成的API或開源代 ...…

查看全部問答∨

[求助]編譯出現函數體和函數聲明相矛盾的提示

    函數體和函數聲明都是下面的那個,有4個參數 void culDmaFromAes(DMA_DESC* PDmaChannel ,BYTE __xdata* pDstAddr ,BYTE length ,BOOL generateInterrupt)     函數體和函數聲明是一樣的,可是編譯的時候還是報函數體和 ...…

查看全部問答∨

BeagleBone Black設計:Qt程序編寫和桌面圖標添加!

24bit的7寸LCD屏和觸摸屏調試通過之后,Qt程序的編寫就要提上日程! 因為我用的是官方的SDK,所以其自帶了Qt4.8的庫!我需要做的只是按照官方說明編寫自己的Qt程序,然后編譯之后生成可執行文件,放入開發板當中去執行即可!! 具體搭建Qt編程環 ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 卢湾区| 东丽区| 安乡县| 东城区| 清水河县| 鹤峰县| 南阳市| 余庆县| 九江市| 洱源县| 泸水县| 合江县| 调兵山市| 闻喜县| 隆尧县| 忻州市| 黑龙江省| 三亚市| 琼结县| 察雅县| 师宗县| 麻栗坡县| 河北区| 若尔盖县| 措美县| 孟州市| 莱芜市| 化德县| 红河县| 获嘉县| 吉水县| 平乡县| 封开县| 宁海县| 星座| 德令哈市| 启东市| 定边县| 绍兴县| 保山市| 金塔县|