時間戳與日期時間互轉C語言

来源:http://www.cnblogs.com/lort/archive/2016/06/13/5579640.html
-Advertisement-
Play Games

/* * ctime.h * * Created on: May 19, 2016 * Author: root */ #ifndef CTIME_H_ #define CTIME_H_ #include "common/micro_type.h" #define OFFSET_SECOND 946 ...


/*  * ctime.h  *  *  Created on: May 19, 2016  *      Author: root  */   #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;//這裡註意,世界時間已經加上北京時間差8,     tTime->iMin  = (lSec % 3600) / 60;     tTime->iSec  = (lSec % 3600) % 60; }
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、和mysql擴展庫的區別: (1 安全性、穩定性更高 (2 提供了面向對象和麵向過程兩種風格 2、php.ini 中的 extension=php_mysqli.dll 解除封印 3、面向對象:查詢列表 1 <?php 2 3 //mysqli 操作數據(面向對象風格) 4 5 #1、創建Mys ...
  • 下麵的 Des 加密解密代碼,在加密時正常,但是在解密是拋出錯誤: 解決方法: 將 setKey方法修改為如下: 不使用SecureRandom生成SecretKey,而是使用SecretKeyFactory;重新實現方法generateKey,代碼如下 問題解決。 另外如果 加密時 和解密 時使用 ...
  • C和指針 相關基礎知識:記憶體的分配(譚浩強版) 1、整型變數的地址與浮點型/字元型變數的地址區別?(整型變數/浮點型變數的區別是什麼) 2、int *p,指向整型數據的指針變數。 3、通過指針變數訪問整型變數。 4、*p :指針變數p指向的存儲單元(變數) 5、p = &a——>> *p = *&a ...
  • 最近發現,很多網友喜歡把tomcat的work目錄里的東西叫做緩存,其實那不是很恰當,work目錄只是tomcat的工作目錄,也就是tomcat把jsp轉換為class文件的工作目錄,這也正是為什麼它叫work目錄而不是cache目錄的原因。 jsp,tomcat的工作原理是當瀏覽器訪問某個jsp頁 ...
  • Python 去劍式 種種變化,用以體演總訣。共有三百六十種變化。 用以破解普天下各門各派的劍法。「破劍式」雖只一式,但其中於天下各門各派劍法要義兼收並蓄;雖說「無招」卻是以普天下劍法之招數為根基,因而其變化之多端不遜於總決式。 摘自金庸 《笑傲江湖》 前兩章介紹了python的基本的語法格式---... ...
  • 指針在編程中有時很重要的作用 我們可以用它完成一些看似不可能完成的任務 #include<iostream>using namespace std;void square(int *n){ *n=*n**n;}int main(){ int num = 2; cout<<"The original ...
  • 對於從Node.js轉Ruby的人很可能會有和我一樣的疑惑,為什麼要有Bundler這個東西?Rubygems不夠嗎? 從Node.js到Ruby的包管理器 在Node的世界里,依賴管理是由npm來完成的。所有依賴信息都寫在package.json裡面之後,一個 就能安裝所有的依賴,然後直接運行程式 ...
  • 1. 位元組轉10進位 直接使用(int)類型轉換。 2. 10進位轉位元組 直接使用(byte)類型轉換。 3. 位元組數組轉16進位字元串 對每一個位元組,先和0xFF做與運算,然後使用Integer.toHexString()函數,如果結果只有1位,需要在前面加0。 4. 16進位字元串轉位元組數組 這 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...