首页 > 编程 > C > 正文

浅谈时间戳与日期时间互转C语言

2020-01-26 14:33:19
字体:
来源:转载
供稿:网友

浅谈时间戳与日期时间互转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;//这里注意,世界时间已经加上北京时间差8,  tTime->iMin = (lSec % 3600) / 60;  tTime->iSec = (lSec % 3600) % 60;}

以上这篇浅谈时间戳与日期时间互转C语言就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选