//date.cpp file
#include "date.h"
#include <iostream>
#include <time.h>
#include <string>
#include <math.h>
#include <stdio.h>
#include <sstream>
using namespace std;
Date::Date()
{
time_t timer;
struct tm y2k;
int leftoverseconds;
int numdays;
y2k.tm_hour = 0;
y2k.tm_min = 0;
y2k.tm_sec = 0;
y2k.tm_year = 100;
y2k.tm_mon = 0;
y2k.tm_mday = 1;
time(&timer);
year = difftime(timer,mktime(&y2k))/SECONDSINYEAR + 2000;
leftoverseconds = fmod(difftime(timer,mktime(&y2k)),
SECONDSINYEAR);
numdays = leftoverseconds/86400;
for (int i = 0; i < 12; i++)
if (DaysAtMonthEnd[i] < numdays)
;
else
month = i+1;
day = numdays - DaysAtMonthEnd[month-3] -3;
}
Date::Date(int yy, int mm, int dd)
{
if (yy >= 1900)
year = yy;
else
cout << "Error setting date!";
if (mm <= 12)
month = mm;
else
cout << "Error setting date!";
if (dd <= MonthDays [dd+1])
day = dd;
else
cout << "ERROR setting date!";
shortDisplay = true;
}
Date::Date (int yy, int mm)
{
if (yy >= 1900)
year = yy;
else
cout << "Error setting date!";
if (mm <= 12)
month = mm;
else
cout << "Error setting date!";
day = 1;
shortDisplay = true;
}
Date::Date (int yy)
{
if (yy >= 1900)
year = yy;
else
cout << "Error setting date!";
month = 1;
day = 1;
shortDisplay = true;
}
Date::Date (const Date &otherDate)
{
year = otherDate.year;
month = otherDate.month;
day = otherDate.day;
shortDisplay = true;
}
Date::Date (string dateStr)
{
setDate(dateStr);
}
void Date::setDate (int yy, int mm, int dd)
{
year = yy;
month = mm;
day = dd;
}
void Date::setDate (int yy, int mm)
{
year = yy;
month = mm;
day = 1;
}
void Date::setDate (int yy)
{
year = yy;
month = 1;
day = 1;
}
void Date::setDate(const Date &otherDate)
{
year = otherDate.year;
month = otherDate.month;
day = otherDate.day;
}
void Date::setDate (string dateSTr)
{
string dateStr, dd, mm, yy;
int day, month, year, find1, find2;
getline (cin,dateStr);
find1 = dateStr.find("/");
find2 = dateStr.rfind("/");
if (find1 == find2)
{
cout << "Error getting date!" << endl;
setDate(dateStr);
}
else
;
if ((find1 == 1) && (find2 == 4))
{
mm = dateStr.substr(0,0);
dd = dateStr.substr(2,3);
yy = dateStr.substr(5,8);
}
else if ((find1 == 1) && (find2 == 3))
{
mm = dateStr.substr(0,0);
dd = dateStr.substr(2,2);
yy = dateStr.substr(4,7);
}
else if ((find1 == 2) && (find2 == 5))
{
mm = dateStr.substr(0,1);
dd = dateStr.substr(3,4);
yy = dateStr.substr(6,9);
}
else if ((find1 == 2) && (find2 == 4))
{
mm = dateStr.substr(0,1);
dd = dateStr.substr(3,3);
yy = dateStr.substr(5,8);
}
else
{
cout << "Error getting date!" << endl;
setDate(dateStr);
}
day = atoi(dd.c_str());
month = atoi(mm.c_str());
year = atoi(yy.c_str());
}
void Date::setYear(int yy)
{
if (yy > 1899)
year = yy;
else
cout << "Error setting date!" << endl;
}
void Date::setMonth (int mm)
{
if (mm < 13)
month = mm;
else
cout << "Error setting date!" << endl;
}
void Date::setDay (int dd)
{
if (MonthDays[month=1] >= dd)
day = dd;
else
cout << "Error setting date!" << endl;
}
int Date::getYear()
{
return year;
}
int Date::getMonth()
{
return month;
}
int Date::getDay()
{
return day;
}
void Date::setShortDisplay()
{
shortDisplay = true;
}
void Date::setLongDisplay()
{
shortDisplay = false;
}
bool Date::isShortDisplay()
{
return shortDisplay;
}
void Date::operator++()
{
if (day < MonthDays[month-1])
day ++;
else if ((day == MonthDays[month-1]) && (month < 12))
{
day = 1;
month ++;
}
else if ((day == MonthDays[month =1]) && (month ==12))
{
day = 1;
month = 1;
year ++;
}
else
cout << "Error setting date!";
}
int Date::operator+= (int dd)
{
int addyears; //number of years to add
int leftoverdays; //days leftover after dividing by 365
addyears = dd/365;
leftoverdays = dd%365;
year += addyears;
for (int i = 0; i <= leftoverdays; i++)
if (day < MonthDays [month -1])
day ++;
else if ((day == MonthDays [month-1]) && (month < 12))
{
day = 1;
month ++;
}
else if ((day == MonthDays [month-1]) && (month == 12))
{
day = 1;
month = 1;
year ++;
}
else
cout << "Error setting date!";
}
bool Date::operator== (Date &otherDate)
{
bool equal;
if ((day == otherDate.day) && ((month == otherDate.month) &&
(year == otherDate.year)))
equal = true;
else
equal = false;
return equal;
}
bool Date::operator< (Date &otherDate)
{
bool less;
if (year < otherDate.year)
less = true;
else if (year > otherDate.year)
less = false;
else if ((year == otherDate.year) && (month < otherDate.month))
less = true;
else if ((year == otherDate.year) && (month > otherDate.month))
less = false;
else if ((year == otherDate.year) && ((month == otherDate.month) &&
(day < otherDate.day)))
less = true;
else if ((year == otherDate.year) && ((month == otherDate.month) &&
(day > otherDate.day)))
less = false;
else
less = false;
return less;
}
string Date::toString()
{
string zero = "0";
string slash = "/";
string space = " ";
string comma = ",";
string fdate;
string fday;
string fmonth;
stringstream dd;
stringstream mm;
stringstream yy;
dd << day;
mm << month;
yy << year;
string days = dd.str();
string months = mm.str();
string years = yy.str();
string longmonth;
if (shortDisplay == true)
{
if (day < 10)
fday = zero + days;
else
fday = days;
if (month < 10)
fmonth = zero + months;
else
fmonth = months;
fdate = months + slash + fday + slash + years;
}
else
{
switch (month)
{
case 1:
longmonth = "January";
break;
case 2:
longmonth = "February";
break;
case 3:
longmonth = "March";
break;
case 4:
longmonth = "April";
break;
case 5:
longmonth = "May";
break;
case 6:
longmonth = "June";
break;
case 7:
longmonth = "July";
break;
case 8:
longmonth = "August";
break;
case 9:
longmonth = "September";
break;
case 10:
longmonth = "October";
break;
case 11:
longmonth = "November";
break;
case 12:
longmonth = "December";
break;
}
fday = days;
fdate = longmonth + space + fday + comma + space + years;
}
return fdate;
}
string Date::monthString (int month)
{
string longmonth;
switch (month)
{
case 1:
longmonth = "January";
break;
case 2:
longmonth = "February";
break;
case 3:
longmonth = "March";
break;
case 4:
longmonth = "April";
break;
case 5:
longmonth = "May";
break;
case 6:
longmonth = "June";
break;
case 7:
longmonth = "July";
break;
case 8:
longmonth = "August";
break;
case 9:
longmonth = "September";
break;
case 10:
longmonth = "October";
break;
case 11:
longmonth = "November";
break;
case 12:
longmonth = "December";
default:
cout << "Error setting date!";
break;
}
return longmonth;
}