Hello Fa.,

Saturday, April 13, 2002, 12:23:43 PM, you wrote:

FRM> Bsp.: Am 15.08.2005 will ich mir einen neuen PC kaufen.
FRM>       Wieviel Tage ist es bis dahin, von heute an.

-- da ich ja grad am C'len bin, habe ich da mal sowas (mit hilfe des
   Buches) geschrieben.

/* ............................................................ */
int tage[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
struct datum {
                unsigned tag:5;
                unsigned monat:4;
                unsigned jahr:7;
        };

int date_diff(struct datum d1, struct datum d2);

void main(int argc, char **argv) {
        int tag, monat, jahr;
        struct datum d1, d2;

        if (argc != 3) {
                printf("%s start_date end_date\n", argv[0]);
                exit(1);
        }

        sscanf(argv[1], "%d.%d.%d", &tag, &monat, &jahr);
        d1.tag=tag; d1.monat=monat; d1.jahr=jahr;

        sscanf(argv[2], "%d.%d.%d", &tag, &monat, &jahr);
        d2.tag=tag; d2.monat=monat; d2.jahr=jahr;

        printf("diff: %d\n", date_diff(d1, d2));

}

int schaltjahr(int jahr)
{
  return (jahr%4 == 0 && jahr%100 != 0 || jahr%400 == 0);
}

long day_num(struct datum d)
{
  long res=0;
  int  i;

  for (i = 0; i < d.jahr; i++) {
    res += 365;
    if (schaltjahr(1900 + i)) {
      res++;
    }
  }
  for (i = 1; i < d.monat; i++) {
    res += tage[i-1];
    if (i == 2 && schaltjahr(1900 + d.jahr)) {
      res++;
    }
  }
  res += d.tag;
  return res;
}

int date_diff(struct datum d1, struct datum d2)
{
  return (int)(day_num(d2) - day_num(d1));
}

/* ............................................................ */

----------------------------------------------------------------------------
PUG - Penguin User Group Wiesbaden - http://www.pug.org

Antwort per Email an