怎么不使用任何时间函数得到日期时间

如何不使用任何时间函数得到日期时间?
想通过自己计算,
把一个整数转化为日期时间,
好像是通过毫秒的计算,
从1970.1.1   00:00:00时间点开始,
麻烦大家了,
多谢。。。
顺祝新年快乐!

------解决方案--------------------
每天有24*3600秒。所以首先将整数除以24*3600以及求关于24*3600的模。
这样就可以知道离1970.1.1 00:00:00有多少天加多少秒。
根据一天里面离0点多少秒很容易计算出时间,就不用介绍了吧.
而根据天数计算年月日,也不是很难,我们需要了解一下韵年的规律就可以了。
所以每400年,总共有99+400*365天,根据这个可以先计算出过了多少个400年(呵呵,对于我们现在常用的日期,这个部分应该都是0)
然后对于不超过400年的,开始30年(不包含2000年)有7个韵年,所以是30*365+7天。
可以计算出在2000年后还是2000年前
后面部分,第一个100年24个韵年为100*365+24天,后面每100年为25个韵年为100*365+25天,可以计算出到底在2000年后又过了多少个100年余多少天。
对于余下的天数,每4年一个韵年,可以计算出年份。
找出年份后,然后确定这个年份是否韵年,以及在当前年份还余多少天,根据每月天数确定月份和日期。
------解决方案--------------------
这是我的日期函数库的一部分,希望对你有所帮助


#include <time.h>
#include <math.h>
#include <stdio.h>
#include "datetime.h "


int main()
{
unsigned y,m,d,h,mi,s,ms;
DateTime dt;
dt = Now();
DecodeDate(dt,&y,&m,&d);
DecodeTime(dt,&h,&mi,&s,&ms);
printf( "CurrentYear is %d\n ",CurrentYear());
printf( "Now is %lf\n ",(double)dt);
printf( "y=%d,m=%d,d=%d\n ",y,m,d);
printf( "h=%d,mi=%d,s=%d\n ",h,mi,s);


getchar();
return 0;
}

/*{ Date/time support routines }*/
void DateTimeToTimeStamp(DateTime ADateTime,TimeStamp *ts)
{
double ip; //整数部分
double p; //小数部分
p = modf(ADateTime,&ip); //分别取浮点数的整数部分和小数部分
ts-> ts_date = (int)ip + DateDelta;
ts-> ts_time = (int)(p * MSecsPerDay);
}


void ValidateTimeStamp(TimeStamp ts)
{
if(ts.ts_time < 0 || ts.ts_date < 0)
{
fprintf(stderr, "%d.%d is not a valid timestamp\n ",ts.ts_date,ts.ts_time);
exit(1);
}
}


DateTime TimeStampToDateTime(TimeStamp ATimeStamp)
{
double dt;
ValidateTimeStamp(ATimeStamp);
dt = ATimeStamp.ts_date - DateDelta;
dt += ATimeStamp.ts_time / (double)MSecsPerDay;
return ((DateTime) dt);
}

/*Time encoding and decoding*/

int TryEncodeTime(unsigned Hour,unsigned Min,unsigned Sec,unsigned MSec,DateTime *Time)
{
if ((Hour < HoursPerDay) && (Min < MinsPerHour) && (Sec < SecsPerMin) && (MSec < MSecsPerSec))
{
*Time = (Hour * (MinsPerHour * SecsPerMin * MSecsPerSec) +
Min * (SecsPerMin * MSecsPerSec) +
Sec * MSecsPerSec +
MSec) / (double)MSecsPerDay;
return (1);
}
return (0);
}

DateTime EncodeTime(unsigned Hour,unsigned Min,unsigned Sec,unsigned MSec)
{
DateTime dt;
if(TryEncodeTime(Hour,Min,Sec,MSec,&dt))
return dt;
else
{
fprintf(stderr, "EncodeTime():Invalid argument to time encode.\n ");
exit(1);
}
}

void DecodeTime(DateTime ADateTime,unsigned *Hour,unsigned *Min, unsigned *Sec,unsigned *MSec)
{
TimeStamp ts;
int msecCount;
DateTimeToTimeStamp(ADateTime,&ts);
msecCount = ts.ts_time;
*MSec = msecCount % MSecsPerSec;
msecCount /= MSecsPerSec;
*Sec = msecCount % SecsPerMin;
msecCount /= SecsPerMin;
*Min = msecCount % MinsPerHour;
*Hour = msecCount / MinsPerHour;
}

/*Date encoding and decoding*/
int LeapYear(unsigned year)
{
if( year & 3 ) /*如果不能被4整除*/
return( 0 );
if( year % 100 != 0 ) /*能被4整除但不能被100整除*/
return ( 1 );