日期转换的算法验证

    技术2022-07-11  95

    #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年计算,而不是元年计算呢?

     

     

    Processed: 0.010, SQL: 9