Aplikacja konsolowa obliczająca datę

0

Witam
Potrzebuję mały programik, który zawiera klasę opisującą datę oraz operacje dodawanie do daty dowolnej liczby dni i metodę obliczającą różnicę między dwiema datami oraz metodę drukującą datę w różnych formatach. Myślę że data może być pobierana z systemu. Ktoś może chciałby się podjąć zadania?

0

W jakich różnych formatach? Za 100zl mogę zrobić

0

W Excelu napiszesz w 5 min coś takiego...

0
Kalzum napisał(a):

Witam
Potrzebuję mały programik, który zawiera klasę opisującą datę oraz operacje dodawanie do daty dowolnej liczby dni i metodę obliczającą różnicę między dwiema datami oraz metodę drukującą datę w różnych formatach. Myślę że data może być pobierana z systemu. Ktoś może chciałby się podjąć zadania?

data = rok, miesiąc, dzień, godzina, minuta, sekunda...

zamieniasz to na liczbę dni od 2000 roku, czy dowolnego innego,
a potem to już zwyczajnie obliczasz:

double day1, day2;

liczba dni pomiędzy:
double ddni = day2-day1;

liczba sekund: ddni * 86400;

liczba lat: ddni /365.25;
itd.

0

// ---------- daty juliańskie

// rmd = tablica 6 x int = rok, mc, dzień, godz, minuta, sekunda
// jd = data liczona od roku zero w południe, np.: jd = 2451544.5 to rok 200001 0000

void j2rmd(int rmd[], double jd)
{
int j = (int)(jd += jDdata), y,m,d;

jd -= j; // frac
if( (jd -= 0.5) >= 0 ) j++;
else jd += 1;

j -= 1721119;
y = (4j - 1) / 146097; j = 4j - 1 - 146097y; d = j / 4;
j = (4
d + 3) / 1461; d = 4d + 3 - 1461j; d = (d + 4) / 4;
m = (5d - 3) / 153; d = 5d - 3 - 153*m ; d = (d + 5) / 5;
y = 100 * y + j;

if( m < 10 ) m += 3;
else m -= 9, y++;

rmd[0] = y; rmd[1] = m; rmd[2] = d;

rmd[3] = (int)(jd*=24); jd -= rmd[3]; // godz
rmd[4] = (int)(jd*=60); jd -= rmd[4]; // min
rmd[5] = (int)(jd *60 + 0.5); // sec
}

char* j2str(char *s, double t)
{
int rmd[8];
j2rmd(rmd, t);

wvsprintf(s, "%d-%02d-%02d %02d:%02d:%02d", (char*)rmd);
return s;
}

i jeszcze tak:
int rmd2j(int y, int m, int d)
{
if( m > 2 ) m -= 3;
else m += 9, y--;

int c = y / 100, ya = y - 100*c;

return (146097c) / 4 + (1461ya) / 4 + (153*m + 2) / 5 + d + 1721119;
}

0

to tylko taka ciekawostka...

2451544.5 / 365.25 = 6711.9630390143737166324435318275 dni...
a to raczej nie jest 2000r lecz coś w okolicach: -4700 lat pne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1