#include <stdio.h>
#include <stdlib.h>
unsigned long seconds_since1970(int yr,int mn,int day,int hh,int nn,int ss);
unsigned long days_since1970(int yr,int mn,int day);
static unsigned long days_since_common_era(int yr,int mn,int day);
//距公元年天数
unsigned long days_since_common_era(int yr,int mn,int day)
{
int i,days=0;
unsigned long s;
int mont[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
mont[2]=28;
if (yr0==0)
{if (yr@0==0)
mont[2]=29;
}
else if (yr%4==0)
mont[2]=29;
for (i=0;i<mn;i++)
days+=mont[i];
days+=day;
s=(unsigned long)(yr-1)*365+(int)((yr-1)/4)-(int)((yr-1)/100)+(int)((yr-1)/400)+days;
return s;
}
//距1970-01-01 天数
unsigned long days_since1970(int yr,int mn,int day)
{
return days_since_common_era(yr,mn,day)-719163;
}
//距1970-01-01 秒数
unsigned long seconds_since1970(int yr,int mn,int day,int hh,int nn,int ss)
{ unsigned long t;
t=days_since_common_era(yr,mn,day)-719163;
return t*(unsigned long)86400+(unsigned long)hh*(unsigned long)3600+nn*60+ss;
}
int main(void)
{
unsigned long daysLen=0;
unsigned long seconds=0;
daysLen=days_since1970(2020,7,01);
seconds=seconds_since1970(2120,7,1,0,0,0);
printf("data size is %d\n",daysLen);
printf("seconds: %d\n",seconds);
system("pause");
return 0;
}
对日期进行转换方便对时间的处理。
有趣的问题是为什么要计算从1970年计算,而不是元年计算呢?