#include "Data_Tempo.hh" Data_Tempo::Data_Tempo() { gg = 1; mm = 1; aa = 1900; } Data_Tempo::Data_Tempo(int anno, int mese, int giorno, int ora, int min, int sec) : Tempo(ora, min, sec) { gg = giorno; mm = mese; aa = anno; } int Data_Tempo::giorno() const { return gg; } int Data_Tempo::mese() const { return mm; } int Data_Tempo::anno() const { return aa; } bool Data_Tempo::bisestile() const { return ((aa % 4 == 0) && (aa % 100 != 0)) || (aa % 400 == 0); } int Data_Tempo::giorni_del_mese() const { switch (mm) { case 2: if (bisestile()) return 29; else return 28; case 4: case 6: case 9: case 11: return 30; default: return 31; } } void Data_Tempo::avanza_un_giorno() { if (gg == giorni_del_mese()) { if (mm == 12) { mm = 1; aa++; } else mm++; gg = 1; } else gg++; } Data_Tempo Data_Tempo::operator+(const Tempo& T) const { Data_Tempo tmp = *this; tmp.sec = sec + 3600*T.ore() + 60*T.minuti() + T.secondi(); if (tmp.sec >= 86400) { tmp.sec = tmp.sec - 86400; tmp.avanza_un_giorno(); } return tmp; } bool Data_Tempo::operator<(const Data_Tempo& D) const { return aa < D.aa || (aa == D.aa && mm < D.mm) || (aa == D.aa && mm == D.mm && gg < D.gg) || (aa == D.aa && mm == D.mm && gg == D.gg && sec < D.sec); } void Data_Tempo::azzera() { sec = 0; gg = 1; mm = 1; aa = 1900; }