timeofsecondmain.cpp

来自「把一个年、月、日、时、分、秒的时间转换为一个基于1970年1月1日0时0分0秒的」· C++ 代码 · 共 131 行

CPP
131
字号

#include "iostream.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 unsigned int  uint16;
typedef unsigned char uint8;
typedef struct date_time
{	
    uint16   iYear;
    uint16   iMon;
    uint16   iDay;

    uint16   iHour;
    uint16   iMin;
    uint16   iSec;
    uint16   iMsec;
} DATE_TIME;


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;
	tTime->iMin  = (lSec % 3600) / 60;
	tTime->iSec  = (lSec % 3600) % 60;
}

DATE_TIME  ARM_Time;
void main()
{	
	unsigned long my_second;
	DATE_TIME     *my_date_time;
	my_date_time = &ARM_Time;

	while(1)
	{
		cout << "Please input the number of YEAR:" << endl;
		cin >> my_date_time->iYear;
		cout << "Please input the number of MONTH:" << endl;
		cin >> my_date_time->iMon;
		cout << "Please input the number of DAY:" << endl;
		cin >> my_date_time->iDay;
		cout << "Please input the number of HOUR:" << endl;
		cin >> my_date_time->iHour;
		cout << "Please input the number of MINUTE:" << endl;
		cin >> my_date_time->iMin;
		cout << "Please input the number of SECOND:" << endl;
		cin >> my_date_time->iSec;
		cout<<endl;
		
		my_second = GetSecondTime(my_date_time);
		cout << "Your date time is equal to " << my_second << " SECONDS based on 1970/1/1/00:00:00" << endl;

		GetDateTimeFromSecond(my_second, my_date_time);
		cout << my_second <<" SECONDS is equal to "
		 << (unsigned int)my_date_time->iYear<<"/"<< (unsigned int)my_date_time->iMon<<"/"
		 << (unsigned int)my_date_time->iDay <<"/"<< (unsigned int)my_date_time->iHour<<":"
		 << (unsigned int)my_date_time->iMin <<":"<< (unsigned int)my_date_time->iSec<<endl<<endl;
	}
		 
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?