Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void secs_to_hms(long ts,long *h,long*mn,long*s){
- if(ts>0){
- *h=ts/3600;
- *mn=ts%3600/60;
- *s=ts%60;
- }else{
- *h=23+ts/3600;
- *mn=59+ts%3600/60;
- *s=59+ts%60;
- }
- }
- int monthdays[]={31,28,31,30,31,30,31,31,30,31,30,31,
- 31,29,31,30,31,30,31,31,30,31,30,31};
- int y_is_leap(long y){
- return (y%4==0&&y%100!=0||y%400==0);
- }
- long y_to_days(long y){
- long d=0;
- if(y>2000){
- y=((y-2000)%400+2000);
- d+=(y-2000)/400*146097;
- }else{
- y=(2000-(2000-y)%400);
- d-=(2000-y)/400*146097;
- }
- while(y>2000){
- y--;
- d+=365+y_is_leap(y);
- }
- while(y<2000){
- d-=365+y_is_leap(y);
- y++;
- }
- return d;
- }
- long days_to_dofw(long d){
- if(d>=0){
- return (d+4)%7+1;
- }else{// day zero was a friday (5).
- return 7-(2-d)%7;
- }
- }
- long ymd_to_days(long y,long m,long d){
- while(m>12){y++;m-=12;}
- while(m<1){y--;m+=12;}
- while(m>1){
- int leap = y_is_leap(y);
- int md = monthdays[m-2+12*leap];
- d+=md;
- m--;
- }
- d += y_to_days(y);
- //400y = 365*400 + 100 - 4 + 1 =146097
- return d;
- }
- void days_to_ymd(long d,long *yp,long *mp,long *dp){
- long y=2000;
- long m=1;
- long yd=366;
- if(d>146097){
- y+=d/146097*400;
- d=d%146097;
- }
- if(d<-146097){
- y-=(-d)/146097*400;
- d= -((-d)%146097);
- }
- while(d>yd){
- d-=yd;
- y++;
- int leap = (y%4==0&&y%100!=0||y%400==0);
- yd=365+leap;
- }
- while(d<1){
- y--;
- int leap = (y%4==0&&y%100!=0||y%400==0);
- yd=365+leap;
- d+=yd;
- }
- long md = 31;
- while(d>md){
- d-=md;
- m++;
- int leap = (y%4==0&&!y%100==0||y%400==0);
- md = monthdays[m-1+12*leap];
- }
- *dp=d;
- *mp=m;
- *yp=y;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement