Muszę przechowywać wiek (lata, miesiące, dni ... ewentualnie godziny, minuty, sekundy) użytkownika. Pracuję z C++ i zwiększam.Które klasy zwiększające powinny być używane do przechowywania ludzi w wieku
Nie jestem pewien, która klasa boost::posix_time
(lub boost::date_time
) powinienem użyć.
Próbowałem boost::posix_time::time_duration
, ale nie jest to oczywiste, ponieważ nie ma konstruktora biorąc liczbę lat, to zaledwie kilka godzin, więc zrobiłam:
boost::posix_time::time_duration age = boost::posix_time::hours(24*365*ageInYears);
Ale nie jestem pewien, że to dobra strategia, ponieważ wszystkie lata nie ma 365 dni ;-)
Próbowałem także boost::gregorian::date
, ale to trudne, ponieważ ten nie pozwala na przechowywanie year
przed 1400 (i to przechowuje datę, a nie czas).
- Nie chcę przechowywać daty urodzenia użytkownika, ponieważ muszę przechowywać jego wiek, kiedy mój program był uruchomiony (dane medyczne).
- Nie chcę przechowywać zwykłego
int
, ponieważ nie jest on wystarczająco dokładny (24 lata + 11 miesięcy to prawie 25). - Nie chcę przechowywać
float
bo nie chcę wyważać otwartych drzwi z pływakiem do nawrócenia wiekowej musiałbym zrobić ...
Czy naprawdę nie ma klasy, co ułatwia przechowywać wiele lat i opcjonalnie liczbę miesięcy i dni doładowania?
Idealnie dla faceta 30 lat i pół roku, chciałbym, aby móc utworzyć obiekt tak: boost::....... theAge(30, 6, 0);
a następnie:
- posiada funkcję, aby uzyskać wiek w latach: theAge.years() powrót 30 (pomijając miesięcy)
- ewentualnie mieć konwersję do pływaka, który dałby mi 30.5 jako wiek
"Nie chcę, aby zapisać datę urodzenia użytkownika" Tak więc obliczyć różnicę (CURRENT_TIME - date_of_birth) jako 'boost :: posix_time :: time_duration'. Nie sądzę, że 1400 jest prawdziwym ograniczeniem dla programu medycznego. –
Problem polega na tym, że tak naprawdę nie znam daty urodzin pacjenta ... lekarz wprowadza bezpośrednio wiek jako dane wejściowe. – jpo38
Jeśli lekarz wprowadzi wiek, obliczyć DOB z tego. –