Einzelnen Beitrag anzeigen
Alt 04.12.2002, 17:59   #2
kikakater
Inventar
 
Registriert seit: 24.01.2001
Beiträge: 5.631


Standard

Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

typedef struct {
 int tag_quelle_und_ziel
    ,monat_quelle_und_ziel
    ,jahr_quelle_und_ziel
    ,differenz_tag_plusminus
    ,differenz_monat_plusminus
    ,differenz_jahr_plusminus
    ,schalter_dochnichtquelle; /* 1 .. Tagesdatum einsteuern */
} DATUMPARAMETER;

int BerechnungDifferentesDatum(DATUMPARAMETER *pDatum);

int main( void )
{
 DATUMPARAMETER sDatum;

 memset(&sDatum,0,sizeof(sDatum));

 printf("Tag  : "); scanf("%d",&sDatum.differenz_tag_plusminus);
 printf("Monat: "); scanf("%d",&sDatum.differenz_monat_plusminus);
 printf("Jahr : "); scanf("%d",&sDatum.differenz_jahr_plusminus);

 sDatum.schalter_dochnichtquelle= 0;

 sDatum.tag_quelle_und_ziel = 1;
 sDatum.monat_quelle_und_ziel = 12;
 sDatum.jahr_quelle_und_ziel = 1980;

 if( BerechnungDifferentesDatum(&sDatum) < 0 )
 { printf("Fehler bei der Datumsberechnung\n"); exit(0); }

 printf("Das Datum lautet %02d.%02d.%04d\n"
 ,sDatum.tag_quelle_und_ziel
 ,sDatum.monat_quelle_und_ziel
 ,sDatum.jahr_quelle_und_ziel);

 return 0;
}

/* Datum berechnen ... ! intern ! Monat 0 - 11, Jahr 0 - 127, Basis 1900 */
int BerechnungDifferentesDatum(DATUMPARAMETER *pDatum)
{
 struct tm s_tm,*ps_tm;
 time_t time_t_r;

 if(pDatum->schalter_dochnichtquelle == 1)
 {
  time_t_r= time(NULL);
  ps_tm= localtime(&time_t_r);
  pDatum->tag_quelle_und_ziel= ps_tm->tm_mday;
  pDatum->monat_quelle_und_ziel= ps_tm->tm_mon;
  pDatum->jahr_quelle_und_ziel= ps_tm->tm_year;
 }
 else
 {
  pDatum->monat_quelle_und_ziel--;
  pDatum->jahr_quelle_und_ziel -= 1900;
 }

 memset(&s_tm,0,sizeof(s_tm));

 s_tm.tm_mday= pDatum->tag_quelle_und_ziel + pDatum->differenz_tag_plusminus;
 s_tm.tm_mon=  pDatum->monat_quelle_und_ziel + pDatum->differenz_monat_plusminus;
 s_tm.tm_year= pDatum->jahr_quelle_und_ziel + pDatum->differenz_jahr_plusminus;

 time_t_r= mktime(&s_tm);

 ps_tm= localtime(&time_t_r);
 if(!ps_tm) return -1;

 pDatum->tag_quelle_und_ziel= ps_tm->tm_mday;
 pDatum->monat_quelle_und_ziel= ps_tm->tm_mon+1;
 pDatum->jahr_quelle_und_ziel= ps_tm->tm_year+1900;

 return 0;
}
kikakater ist offline   Mit Zitat antworten