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;
}