00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00047
#ifndef PDate_INC
00048
#define PDate_INC
00049
00050
00051
#include <string>
00052
#include <ctime>
00053
00054
namespace PLearn {
00055
using namespace std;
00056
00062 class PDate
00063 {
00064
public:
00065 short year;
00066 unsigned char month;
00067 unsigned char day;
00068
00070
PDate();
00071
00072 PDate(
short the_year,
unsigned char the_month,
unsigned char the_day)
00073 :
year(the_year),
month(the_month),
day(the_day) {}
00074
00075 PDate(
int the_year,
int the_month,
int the_day)
00076 :
year(the_year),
month(
int(the_month)),
day(
int(the_day)) {}
00077
00080
PDate(
int julian_day);
00081
00084
PDate(
string date);
00085
00087
bool isMissing() const;
00088
void setMissing();
00089
00090
string info() const;
00091
00093 bool operator==(const
PDate& rhs)
const {
00094
return year == rhs.year &&
month == rhs.month &&
day == rhs.day;
00095 }
00096
00097 bool operator!=(
const PDate& rhs)
const {
00098
return ! (*
this == rhs);
00099 }
00100
00101 bool operator<(
const PDate& rhs)
const {
00102
return year < rhs.
year ||
00103 (
year == rhs.
year &&
month < rhs.
month) ||
00104 (
year == rhs.
year &&
month == rhs.
month &&
day < rhs.
day);
00105 }
00106
00107 bool operator<=(
const PDate& rhs)
const {
00108
return *
this == rhs || *
this < rhs;
00109 }
00110
00111 bool operator>(
const PDate& rhs)
const {
00112
return ! (*
this <= rhs);
00113 }
00114
00115 bool operator>=(
const PDate& rhs)
const {
00116
return ! (*
this < rhs);
00117 }
00118
00123
int toJulianDay() const;
00124
00125
00126 int dayOfWeek()
const
00127
{
return toJulianDay()%7; }
00128
00129 static PDate today()
00130 {
00131 time_t now(time(0));
00132 tm* snow = localtime(&now);
00133
return PDate(1900+snow->tm_year, 1+snow->tm_mon, snow->tm_mday);
00134 }
00135
00136 };
00137
00139 inline int operator-(
const PDate& to_date,
const PDate& from_date)
00140 {
00141
return to_date.
toJulianDay() - from_date.
toJulianDay();
00142 }
00143
00145 inline PDate operator+(
const PDate& pdate,
int ndays)
00146 {
00147
return PDate(pdate.
toJulianDay()+ndays);
00148 }
00149
00152 inline PDate operator-(
const PDate& pdate,
int ndays)
00153 {
00154
return PDate(pdate.
toJulianDay()-ndays);
00155 }
00156
00157
00158 inline ostream&
operator<<(ostream& os,
const PDate& date)
00159 {
00160 os << date.
info();
00161
return os;
00162 }
00163
00166
float date_to_float(
const PDate& t);
00167
00168 PDate
float_to_date(
float f);
00169
00170 inline PDate float_to_date(
double d)
00171 {
return float_to_date(
float(d)); }
00172
00173 }
00174
00175
#endif