不使用任何函数计算日期时间!该怎么解决

不使用任何函数计算日期时间!!
大家好!

如何通过自己计算,
把一个整数转化为日期时间,这个整数相当大,
这个整数是这样计算得来的:
以1601.1.1   零点12:00:00为起始时间点,
一直到现在一个时间点之间所经过的所有1/10毫秒数,
即:所有经过的天数*24*60*60*1000*10+剩余秒数*1000*10
假如这个值是:1A   85   AD   7D   5D   01   25   85(8   bytes)

请问,如何把这个值转换为具体的日期、时间、星期数,
这里没有 <time.h>
不知道大家有没有好办法,
关键是闰年比较麻烦,不知道如何处理,
先谢过大家了,

------解决方案--------------------
闰年还不简单??就多1天。关键是你这种描述好像是错误的!!
一个数字并不和时间一一对应也就是说,有多个数字表示同一个时间。
比如2007.1表示2007年1月1日0时0分0秒,2007.2表示2007年1月2日0时0分0秒
按照你的推算0.1表示24小时可是,10个0.01却是2.4个小时可是0.01却表示1分钟!!
------解决方案--------------------
<time.h> 会没有?
任何标准库都有这个!!

<time.h> :
struct tm *gmtime(long *clock)本函数把clock所指的时间(如由函数time返回的时间)
转换成格林威治时间,并以tm结构形式返回
struct tm *localtime(long *clock)本函数把clock所指的时间(如函数time返回的时间)
转换成当地标准时间,并以tm结构形式返回
------解决方案--------------------
如果从某一天起到今天现在的时间用表示毫秒。
然后在转化成时间,那很简单,搜出1601.1.1 零点12:00:00为到现在中间经历的闰年不久可以了。大约4年就有一个闰年,按356天初步算出大约多少年,在初步算出大约几个闰年。然后在细细算。我有一个万年历,能计算任何一个年份(用的long数据类型,所以就是公元前后21亿年之内)的星期,农历1900-2050年。有机会,楼主看看。
------解决方案--------------------
我晕~~
我说LZ你的闰年还要精确到秒?这无形中不是要加大程序读取的时间么?
你说当一个人用一个万年历的时候会在一年的时候用手指在一年最后一天的23:59:59查看那一天是闰年么?
你是一个程序员,要先考虑用户的使用时间和方式,再去弄那个程序,而不是一味地追求精度
------解决方案--------------------
贴一段代码,能够把自1970-01-01 00:00:00到现在经过的秒数转换为日期时间
功能应该与楼主要求的类似,不过没有转换星期的部分
#define IsLeapYear(Y) (Y)%400==0 || ((Y)%4==0 && (Y)%100!=0)
#define LEAPYEARSECONDS (366*3600*24U)
#define NORMALYEARSECONDS (365*3600*24U)
#define GetYearSeconds(Y) ((IsLeapYear(Y))? LEAPYEARSECONDS : NORMALYEARSECONDS)
#define GetMonthSeconds(Y,M) ((IsLeapYear(Y))? MonthSeconds2[M] : MonthSeconds1[M])

unsigned int MonthSeconds1[12]={3600*24*31,3600*24*28,3600*24*31,3600*24*30,3600*24*31,3600*24*30,3600*24*31,3600*24*31,3600*24*30,3600*24*31,3600*24*30,3600*24*31};
unsigned int MonthSeconds2[12]={3600*24*31,3600*24*29,3600*24*31,3600*24*30,3600*24*31,3600*24*30,3600*24*31,3600*24*31,3600*24*30,3600*24*31,3600*24*30,3600*24*31};
//UTC--> yyyymmddhhnnss
void UTCtoDateTime(unsigned int uiSeconds,unsigned char ucDateTime[15])
{
int year,month,day,hour,min,sec;

//取得年份
for(year=1970;uiSeconds> =GetYearSeconds(year);year++)
{
uiSeconds-=GetYearSeconds(year);
}
//取得月份
for(month=1;uiSeconds> =GetMonthSeconds(year,month);month++)
{
uiSeconds-=GetMonthSeconds(year,month);
}
day=uiSeconds/(3600*24)+1;
uiSeconds%=(3600*24);
hour=uiSeconds/(3600);
uiSeconds%=3600;
min=uiSeconds/60;
uiSeconds%=60;
sec=uiSeconds;
//yyyymmddhhnnss
sprintf(ucDateTime, "%d%02d%02d%02d%02d%02d ",year,month,day,hour,min,sec);
}

------解决方案--------------------
第一个问题是:楼主的数太大,用32位UINT是放不下的.
可以考虑先除以24*60*60*1000*10精确到天数,这一步恐怕要用到大数除法.余数计算当天已过的时分秒.然后在不考虑闰年的情况下计数大约的年数.再在这个大约的年数上计算有多少个闰年,最后修正. 是不是有点苯?

------解决方案--------------------
不知道在说什么

看看mktime 在msdn上的sample
是不是你所需要的
------解决方案--------------------
請問樓主,
為什么有 <time.h> 你不用,非得自己用數字慢慢轉?
是想證明你的想法超前,還是想證明你的水平超強?

你不覺得你這是技術倒退嗎?
------解决方案--------------------