ocssw  1.0
/disk01/web/ocssw/build/src/libosmi/calday.c (r8102/r4879)
Go to the documentation of this file.
00001 static int days[] = {-1, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
00002 
00003 int daysInYear(int year)
00004 {
00005   if ( (year % 4 == 0 && year % 100 != 0) || year % 400 == 0 )
00006     return 366;
00007   else return 365;
00008 }
00009 
00010 int daysInMonth(int year, int month)
00011 {
00012  if( (month==2) && (daysInYear(year)==366)) return 29;
00013  else return days[month];
00014 }
00015 
00016 int getCalDay(int year, int jday, int *month, int *day)
00017 {
00018         int i,sub_days,mdays;
00019     sub_days = jday;
00020     for (i = 1; i < 13; i++) {
00021         mdays = daysInMonth(year,i);
00022         sub_days -= mdays;
00023         if(sub_days <= 0)
00024             break;
00025     }
00026     if(sub_days == 0) {
00027         *month = i;
00028         *day = daysInMonth(year,i);
00029     }
00030     else {
00031         *month = i;
00032         *day = daysInMonth(year,i) + sub_days;
00033     }
00034         return 0;
00035 }
00036 
00037 int getJulianDay(int year, int month, int day)
00038 {
00039     int i;
00040     int julday = 0;
00041     
00042     if(month < 1 || month > 12)
00043         return -1;
00044     if(day < 1 || day > daysInMonth(year,month))
00045         return -1;
00046     for(i = 1; i < month; i++)
00047         julday += daysInMonth(year,i);
00048     julday += day;
00049     return julday;
00050 }