Enviado em 17/09/2023 - 01:56h
Olá galera beleza?
#include <ctime>
#include <iostream>
//Calculando idade atraves do nunero de sapato.
//https://m.youtube.com/watch?v=yT8b0bLlYac
//https://educacao.uol.com.br/disciplinas/geografia/ano-bissexto-por-que-a-cada-4-anos-fevereiro-tem-29-dias.htm
using namespace std;
// Estruturas para representar datas, horas e durações
struct Date {
int year;
int month;
int day;
};
struct Time {
int hours;
int minutes;
int seconds;
};
struct Duration {
long days;
long months;
long minutes;
long hours;
long seconds;
};
// Função para calcular a diferença entre duas datas em dias
int getDaysDifference(const Date& date1, const Date& date2) {
tm timeinfo1 = {0};
timeinfo1.tm_year = date1.year - 1900;
timeinfo1.tm_mon = date1.month - 1;
timeinfo1.tm_mday = date1.day;
std::tm timeinfo2 = {0};
timeinfo2.tm_year = date2.year - 1900;
timeinfo2.tm_mon = date2.month - 1;
timeinfo2.tm_mday = date2.day;
time_t time1 = mktime(&timeinfo1);
time_t time2 = mktime(&timeinfo2);
int daysDiff = ((time2 - time1) / (60 * 60 * 24));
return daysDiff;
}
// Função para obter a data atual
Date getCurrentDate() {
time_t currentTime;
time(¤tTime);
tm* timeinfo = localtime(¤tTime);
Date currentDate;
currentDate.year = timeinfo->tm_year + 1900;
currentDate.month = timeinfo->tm_mon + 1;
currentDate.day = timeinfo->tm_mday;
return currentDate;
}
// Função para obter o horário atual
Time getCurrentTime() {
time_t currentTime;
time(¤tTime);
tm* timeinfo = localtime(¤tTime);
Time currentTimeStruct;
currentTimeStruct.hours = timeinfo->tm_hour;
currentTimeStruct.minutes = timeinfo->tm_min;
currentTimeStruct.seconds = timeinfo->tm_sec;
return currentTimeStruct;
}
// Função para calcular a duração entre duas datas e horas
Duration calculateDuration(const Date& birthDate, const Time& birthTime, const Date& currentDate, const Time& currentTime) {
tm t1 = {0};
t1.tm_year = birthDate.year - 1900;
t1.tm_mon = birthDate.month - 1;
t1.tm_mday = birthDate.day;
t1.tm_hour = birthTime.hours;
t1.tm_min = birthTime.minutes;
t1.tm_sec = birthTime.seconds;
tm t2 = {0};
t2.tm_year = currentDate.year - 1900;
t2.tm_mon = currentDate.month - 1;
t2.tm_mday = currentDate.day;
t2.tm_hour = currentTime.hours;
t2.tm_min = currentTime.minutes;
t2.tm_sec = currentTime.seconds;
time_t time1 = mktime(&t1);
time_t time2 = mktime(&t2);
double seconds = difftime(time2, time1);
double minutes = seconds / 60;
double hours = minutes / 60;
double days = hours / 24;
double months = days / 30.436875; // Média de dias em um mês (365,25 / 12)
Duration duration;
duration.seconds = static_cast<long>(seconds);
duration.minutes = static_cast<long>(minutes);
duration.hours = static_cast<long>(hours);
duration.days = static_cast<long>(days);
duration.months = static_cast<long>(months);
return duration;
}
// Função para calcular a diferença entre dois horários em horas
int getHoursDifference(const Time& currentTime, const Time& birthTime) {
int secondsDiff = (currentTime.hours - birthTime.hours) * 3600 +
(currentTime.minutes - birthTime.minutes) * 60 +
(currentTime.seconds - birthTime.seconds);
if (secondsDiff < 0) {
secondsDiff += 24 * 3600; // Adicionar um dia em segundos
}
int hoursDiff = (secondsDiff / 3600);
return hoursDiff;
}
// Função para exibir a idade e a sobrevida
void displayAgeAndSurvival(const Date& birthDate, const Time& birthTime) {
Date currentDate = getCurrentDate();
Time currentTime = getCurrentTime();
int days = getDaysDifference(birthDate, currentDate);
int hours = getHoursDifference(birthTime, currentTime);
int years = (days / 365);
int months = ((days % 365) / 30);
days = ((days % 365) % 30);
int minutes = (hours * 60);
int seconds = (minutes * 3600) % 60;
cout << "Idade: " << years << " anos" << endl;
cout << "Dias: " << days << endl;
cout << "Meses: " << months << endl;
cout << "Horas: " << hours << endl;
cout << "Minutos: " << minutes << endl;
cout << "Segundos: " << seconds << endl;
}
int main() {
int idade;
Date birthDate, currentDate;
Time birthTime, currentTime;
cout << "Informe a data de nascimento (dia mes ano): ";
cin >> birthDate.day >> birthDate.month >> birthDate.year;
currentDate = getCurrentDate();
currentTime = getCurrentTime();
idade = (currentDate.year - birthDate.year);
cout << "\nInforme a hora de nascimento (horas minutos segundos): ";
cin >> birthTime.hours >> birthTime.minutes >> birthTime.seconds;
Duration duration = calculateDuration(birthDate, birthTime, currentDate, currentTime);
std::cout << "Tempo de sobrevida: " << std::endl;
std::cout << "Você tem: " << idade << " anos" << std::endl;
std::cout << "Dias: " << duration.days << std::endl;
std::cout << "Meses: " << duration.months << std::endl;
std::cout << "Horas: " << duration.hours << std::endl;
std::cout << "Minutos: " << duration.minutes << std::endl;
std::cout << "Segundos: " << duration.seconds << " de vida desde o dia em que nasceu.."<< std::endl;
displayAgeAndSurvival(birthDate, birthTime);
return 0;
}