Porównywanie dwóch dat

0

Witam.

Ma problem. Program ma pobierać od użytkownika jego wiek (ilość lat) a potem obliczyć ile sekund żyje (na podstawie lat, czyli mało precyzyjnie). Problem w tym, że nie bardzo wiem jak mam porównać te dwie daty. Doczytałem w man time.h, że do porównania można użyć difftime ale jak wiek zamienić na datę i zauważyłem, że mogę wykorzystać to, że data w Linuksie jest liczona w sekundach od 1970 roku. Czytałem coś o strukturze tm*data ale nie bardzo wiem jak mogę to wykorzystać (tj. jak to napisać w C), szukałem odpowiedzi na cplusplus.com ale tamte przykłady mało wyjaśniają.Program jest podzielony na trzy pliki. Funkcje wyglądają tak:

int pobierz_wiek(char *prompt){ 
int wiek;
printf(prompt);
scanf("%i",&wiek);

return wiek;
}

void wiek_na_sekundy(int wiek){
time_t sek_do_teraz = time(NULL);
/* ... */
printf("%i\n",...);
}

Natomiast całość jest pod tym linkiem:
https://github.com/smt116/c/tree/master/podstawowe_typy_danych/3

Byłbym wdzięczny za każdą wskazówkę.

0

Chodzi Ci o pobranie np aktualnej daty i godziny? Bo nie rozumiem do końca.

0

Pobranie aktualnej daty do jednej zmiennej, potem od aktualnej daty odjąć wiek i zapisać do drugiej zmiennej (tak żeby otrzymać datę w której rok jest mniejszy od aktualnej o wprowadzony wiek). Potem porównać te dwie daty z wypisać ile sekund różnicy jest między nimi.

0

Nagłówek time.h
tm AktualnyCzas = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
time_t Czas = time(NULL);
AktualnyCzas = *localtime(&Czas);
Aktualny czas będzie wypełnioną strukturą zawierające wszystkie informacje.

time_t seconds;

seconds = time (NULL);
W seconds będzie ilość sekund od 1 stycznia 1970.

Potem już sobie poradzisz?

0
adadada napisał(a)

Nagłówek time.h
tm AktualnyCzas = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
time_t Czas = time(NULL);
AktualnyCzas = *localtime(&Czas);
Aktualny czas będzie wypełnioną strukturą zawierające wszystkie informacje.

time_t seconds;

seconds = time (NULL);
W seconds będzie ilość sekund od 1 stycznia 1970.

Potem już sobie poradzisz?

Szczerze mówiąc ta odpowiedź mi nie pomogła, bo nadal nie wiem jak od aktualnej daty odjąć podany wiek i przeliczyć to na sekundy. To co jest w kodzie wyżej wyczytałem w man :)....

0

w aktualny czas masz pole : tm_year.

Pobierasz wiek jakiejś osoby np poda 16.
Robisz aktulany_czas.tm_year-16;
Wychodzi Ci tam 1995. Masz urodzenie.
Jak ma 16 lat to mnożysz 16 * 365 masz dni.
Dni * 24 masz godziny
Godziny * 60 minut masz minuty
Minuty * 60 masz sekundy

Trudne nie?

0
adadaad napisał(a)

w aktualny czas masz pole : tm_year.

Pobierasz wiek jakiejś osoby np poda 16.
Robisz aktulany_czas.tm_year-16;
Wychodzi Ci tam 1995. Masz urodzenie.
Jak ma 16 lat to mnożysz 16 * 365 masz dni.
Dni * 24 masz godziny
Godziny * 60 minut masz minuty
Minuty * 60 masz sekundy

Trudne nie?

Oczywiście, że w ogóle nie potrzebuje używać struktury w tym zadaniu tylko od razu pomnożyć ale to jest wyjściowy problem dla zadania, w którym użytkownik poda całą datę urodzenia. Naturalnie w tym rozumowaniu nie ma podziału na rok przestępny!.

0

Prawdziwym WTF jest liczenie sekund przez odejmowanie dat, skoro mamy liczyć wiek na podstawie lat.
Zakładajc że jeden rok ma około 365,25 doby wychodzi nam 31557600 sekund w roku.

0
Azarien napisał(a)

Prawdziwym WTF jest liczenie sekund przez odejmowanie dat, skoro mamy liczyć wiek na podstawie lat.
Zakładajc że jeden rok ma około 365,25 doby wychodzi nam 31557600 sekund w roku.

Niestety prowadzący ćwiczenia tak chce... :P.

0

Jak chcesz rok przystępny to sprawdzaj czy on jest? Nie wiem czy Ty chcesz całe rozwiązanie czy jak...
http://pl.wikisource.org/wiki/Rok_przest%C4%99pny/kod

I lecisz forem po kolei lata od np 1995 i sprawdzasz?

0

Dobra można zamknąć temat, bo nie uzyskam odpowiedzi, której oczekiwałem.. zrobię to inaczej.

0

Masz tu idealny przykłąd z difftim'em:
http://www.cplusplus.com/reference/clibrary/ctime/difftime/

0
adadadad napisał(a)

Masz tu idealny przykłąd z difftim'em:
http://www.cplusplus.com/reference/clibrary/ctime/difftime/

Samo użycie diffa jest proste...... cały czas mówię, że chodzi mi o to jak w zmiennej t_time wpisać inny rok (aktualny - wiek) i potem porównać diffem dwie zmienne t_time: difftime(czasAktualny, czasUrodzenia)... Od początku to mówię, proszę czytać ze zrozumieniem.

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