// -*- coding: utf-8 -*- // Time-stamp: // Classe date avec représentation par le nombre de jours depuis // une date de référence #ifndef DATINT_HPP #define DATINT_HPP #include "date.hpp" class Datint { // Opérateur de sortie friend ostream& operator<<(ostream&, const Datint&); public: // Constructeur Datint(int day, int month, int year) { n = Date(day, month, year) - Date::origin; } // Constructeur à partir d'un nombre de jours depuis le 01/01/1970. Datint(int d = 0) : n(d) {} // Constructeur à partir d'une date Datint(Date d) : n(d - Date::origin) {} // Accesseurs int day() const { return Date(n).day(); } int month() const { return Date(n).month(); } int year() const { return Date(n).year(); } // Jour dans la semaine : Lundi <-> 1, Mardi <-> 2, ..., Dimanche <-> 7 // Le 01/01/1970 est un jeudi <-> 4 int weekDay() const { // Explications // - "1 +" donne une valeur entre 1 et 7 // - "+ 10" ajuste pour que le 01/01/1970 soit un jeudi // - donne une valeur positive car -6 % 7 == -6 (et non pas 1) // - 10 = 3 + 7 car Jeudi <-> 4 = 1 + 3 return 1 + (n % 7 + 10) % 7; } // Passage au jour suivant Datint& operator++(int i) { n++; return *this; } // Passage au jour précédent Datint& operator--(int i) { n--; return *this; } // Nombre de jours entre deux dates int operator-(Datint date) const { return n - date.n; } // Décalage d'un nombre de jours Datint& operator+=(int d) { n += d; return *this; } // Égalité bool operator==(Datint date) const { return n == date.n; } // Ordres bool operator<(Datint date) const { return n < date.n; } bool operator<=(Datint date) const { return n <= date.n; } private: int n; // Nombre de jours depuis le 01/01/1970 }; #endif