Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "date.h"
- #include <iostream>
- using namespace std;
- date::date() {
- init();
- }
- date::date(int y) {
- init();
- setYear(y);
- }
- date::date(int m, int y) {
- init();
- setMonth(m);
- setYear(y);
- }
- date::date(int d, int m, int y) {
- init();
- setYear(y);
- setMonth(m);
- setDay(d);
- }
- date::date(date const &d) {
- init();
- day = d.day;
- month = d.month;
- year = d.year;
- }
- bool date::isBissextile() {
- return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
- }
- int date::getWday() {
- int sd=1; date date1(1,1,1900); // Monday
- if( *this<date1 ){
- while( *this!=date1 ){
- date1.decrement();
- sd = (sd==0) ? 6 : sd-1;
- }
- }else{
- while( *this!=date1 ){
- date1.increment();
- sd = (sd==6) ? 0 : sd+1;
- }
- }
- return sd;
- }
- void date::PrintDate() {
- string Days[] = {"Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"};
- string Months[] = {"Janvier", "Fevrier", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre",
- "Decembre"};
- int tm_wday = getWday(); // days since sunday
- cout << Days[tm_wday] << " " << day << " " << Months[month - 1] << " " << year << endl;
- }
- void date::increment() {
- if (month == 12 && day == months_days[month - 1]) {
- setYear(year+1);
- month = 1;
- day = 1;
- }
- else if (day == months_days[month - 1]) {
- month++;
- day = 1;
- }
- else
- day++;
- }
- date date::operator+=(int d) {
- while (d > 0) {
- increment();
- d--;
- }
- return *this;
- }
- date date::operator+(int d) {
- date date1(day, month, year);
- return date1 += d;
- }
- void date::decrement() {
- if (month == 1 && day == 1) {
- setYear(year-1);
- month = 12;
- day = months_days[month - 1];
- }
- else if (day == 1) {
- month--;
- day = months_days[month - 1];
- }
- else
- day--;
- }
- date date::operator-=(int d) {
- while (d > 0 && year > 0) {
- decrement();
- d--;
- }
- return *this;
- }
- date date::operator-(int d) {
- date date1(day, month, year);
- return date1 -= d;
- }
- date date::operator--() {
- decrement();
- return *this;
- }
- date date::operator++() {
- increment();
- return *this;
- }
- date date::operator--(int) {
- date date1 = *this;
- decrement();
- return date1;
- }
- date date::operator++(int) {
- date date1 = *this;
- increment();
- return date1;
- }
- bool date::operator==(date const &d) {
- return year == d.year && month == d.month && day == d.day;
- }
- bool date::operator!=(date const &d) {
- return !(*this == d);
- }
- bool date::operator<(date const &d) {
- if (year == d.year) if (month == d.month)
- return day < d.day;
- else return month < d.month;
- else return year < d.year;
- }
- bool date::operator<=(date const &d) {
- return *this < d || *this == d;
- }
- bool date::operator>(date const &d) {
- return !(*this <= d);
- }
- bool date::operator>=(date const &d) {
- return !(*this < d);
- }
- int date::operator-(date const &d) {
- date date1(d);
- int res = 0;
- if (*this > date1) {
- while (date1 != *this) {
- date1.increment();
- res++;
- }
- } else {
- while (date1 != *this) {
- date1.decrement();
- res++;
- }
- }
- return res;
- }
- ostream &operator<<(ostream &out, date const &d) {
- out << d.day << "/" << d.month << "/" << d.year;
- return out;
- }
- void date::init() {
- months_days = new int[12];
- months_days[0]=31; months_days[1]=(isBissextile()) ? 29 : 28; months_days[2]=31; months_days[3]=30;
- months_days[4]=31; months_days[5]=30; months_days[6]=31; months_days[7]=31;
- months_days[8]=30; months_days[9]=31; months_days[10]=30; months_days[11]=31;
- year = month = day = 1;
- }
- void date::update_months_days() {
- months_days[1]=(isBissextile()) ? 29 : 28;
- }
Advertisement
Add Comment
Please, Sign In to add comment