淺談時間戳與日期時間互轉(zhuǎn)C語言
淺談時間戳與日期時間互轉(zhuǎn)C語言
/* * ctime.h * * Created on: May 19, 2016 * */ #ifndef CTIME_H_ #define CTIME_H_ #include "common/micro_type.h" #define OFFSET_SECOND 946684800 /* ��1970/1/1/0/0/0��2000/1/1/0/0/0֮��������� */ //#define OFFSET_SECOND 0 /* ��2000/1/1/0/0/0��2000/1/1/0/0/0֮��������� */ #define SECOND_OF_DAY 86400 /* 1������� */ typedef struct date_time { uint16 iYear; uint16 iMon; uint16 iDay; uint16 iHour; uint16 iMin; uint16 iSec; uint16 iMsec; } DATE_TIME; void GetDateTimeFromSecond(unsigned long lSec, DATE_TIME *tTime); #endif /* CTIME_H_ */ /* * ctime.c * * Created on: May 19, 2016 * Author: root */ #include "common/micro_type.h" #include "ctime.h" uint8 DayOfMon[12] = {31,28,31,30,31,30,31,31,30,31,30,31}; /* ������1970/1/1/0/0/0�����ʱ */ unsigned long GetSecondTime(DATE_TIME *date_time) { uint16 iYear, iMon, iDay, iHour, iMin, iSec; iYear = date_time->iYear; iMon = date_time->iMon; iDay = date_time->iDay; iHour = date_time->iHour; iMin = date_time->iMin; iSec = date_time->iSec; uint16 i, Cyear=0; unsigned long CountDay=0; for(i=1970; i<iYear; i++) /* ͳ��1970�굽����֮ǰ�������� */ { if(((i%4==0) && (i%100!=0)) || (i%400==0)) Cyear++; } CountDay = Cyear * 366 + (iYear-1970-Cyear) * 365; for(i=1; i<iMon; i++) { if((i==2) && (((iYear%4==0)&&(iYear%100!=0)) || (iYear%400==0))) CountDay += 29; else CountDay += DayOfMon[i-1]; } CountDay += (iDay-1); CountDay = CountDay*SECOND_OF_DAY + (unsigned long)iHour*3600 + (unsigned long)iMin*60 + iSec; return CountDay; } /* ����ʱ�������1970/1/1/0/0������ */ void GetDateTimeFromSecond(unsigned long lSec, DATE_TIME *tTime) { uint16 i,j,iDay; unsigned long lDay; lDay = lSec / SECOND_OF_DAY; /* תΪ�������ʱ�� */ lSec = lSec % SECOND_OF_DAY; i = 1970; while(lDay > 365) { if(((i%4==0)&&(i%100!=0)) || (i%400==0)) /* ���� */ lDay -= 366; else lDay -= 365; i++; } if((lDay == 365) && !(((i%4==0)&&(i%100!=0)) || (i%400==0))) /* ƽ�� */ { lDay -= 365; i++; } tTime->iYear = i; /* �õ���� */ for(j=0;j<12;j++) /* �����·� */ { if((j==1) && (((i%4==0)&&(i%100!=0)) || (i%400==0))) iDay = 29; else iDay = DayOfMon[j]; if(lDay >= iDay) lDay -= iDay; else break; } tTime->iMon = j+1; tTime->iDay = lDay+1; tTime->iHour = ((lSec / 3600)+8)%24;//這里注意,世界時間已經(jīng)加上北京時間差8, tTime->iMin = (lSec % 3600) / 60; tTime->iSec = (lSec % 3600) % 60; }
以上這篇淺談時間戳與日期時間互轉(zhuǎn)C語言就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
C++實(shí)現(xiàn)圖的鄰接矩陣存儲和廣度、深度優(yōu)先遍歷實(shí)例分析
這篇文章主要介紹了C++實(shí)現(xiàn)圖的鄰接矩陣存儲和廣度、深度優(yōu)先遍歷,實(shí)例分析了C++實(shí)現(xiàn)圖的遍歷技巧,非常具有實(shí)用價值,需要的朋友可以參考下2015-04-04Sublime Text 3 實(shí)現(xiàn)C++代碼的編譯和運(yùn)行示例
下面小編就為大家?guī)硪黄猄ublime Text 3 實(shí)現(xiàn)C++代碼的編譯和運(yùn)行示例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-09-09C++實(shí)現(xiàn)LeetCode(136.單獨(dú)的數(shù)字)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(136.單獨(dú)的數(shù)字),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07基于c++ ege圖形庫實(shí)現(xiàn)五子棋游戲
這篇文章主要為大家詳細(xì)介紹了基于c++ ege圖形庫實(shí)現(xiàn)五子棋游戲,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-12-12C++類與對象的基礎(chǔ)知識點(diǎn)詳細(xì)分析
類和對象是兩種以計算機(jī)為載體的計算機(jī)語言的合稱。對象是對客觀事物的抽象,類是對對象的抽象。類是一種抽象的數(shù)據(jù)類型;變量就是可以變化的量,存儲在內(nèi)存中—個可以擁有在某個范圍內(nèi)的可變存儲區(qū)域2023-02-02C語言實(shí)現(xiàn)宿舍管理系統(tǒng)設(shè)計
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)宿舍管理系統(tǒng)設(shè)計,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03C++?Qt開發(fā)之使用QUdpSocket實(shí)現(xiàn)UDP網(wǎng)絡(luò)通信
Qt 是一個跨平臺C++圖形界面開發(fā)庫,利用Qt可以快速開發(fā)跨平臺窗體應(yīng)用程序,本文主要介紹如何運(yùn)用QUdpSocket組件實(shí)現(xiàn)基于UDP的網(wǎng)絡(luò)通信功能,需要的可以參考下2024-03-03