parent
34a9fe105c
commit
ce2dd054e3
@ -1,79 +0,0 @@
|
|||||||
#include <sys/types.h>
|
|
||||||
#include <time.h>
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
#include "cal.H"
|
|
||||||
using namespace std;
|
|
||||||
|
|
||||||
Calendar::Calendar(void)
|
|
||||||
{
|
|
||||||
time_t clk = time(0);
|
|
||||||
struct tm *now = localtime(&clk);
|
|
||||||
_currdate = asJulianNumber(now->tm_mon+1, now->tm_mday, now->tm_year+1900);
|
|
||||||
}
|
|
||||||
|
|
||||||
Calendar::~Calendar()
|
|
||||||
{}
|
|
||||||
|
|
||||||
// year_ in yyyy format
|
|
||||||
unsigned int Calendar::asJulianNumber(int month_,int day_,int year_)
|
|
||||||
{
|
|
||||||
unsigned long c,ya;
|
|
||||||
|
|
||||||
if (month_>2) month_-=3;
|
|
||||||
else { month_+=9; year_--; }
|
|
||||||
c=year_/100;
|
|
||||||
ya=year_-100*c;
|
|
||||||
return ((146097*c)>>2)+((1461*ya)>>2)+(153*month_+2)/5+day_+1721119;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Calendar::split(int& month_,int& day_,int& year_)
|
|
||||||
{
|
|
||||||
unsigned long d;
|
|
||||||
unsigned long j=_currdate-1721119;
|
|
||||||
year_=(int) (((j<<2)-1)/146097);
|
|
||||||
j=(j<<2)-1-146097*year_;
|
|
||||||
d=(j>>2);
|
|
||||||
j=((d<<2)+3)/1461;
|
|
||||||
d=(d<<2)+3-1461*j;
|
|
||||||
d=(d+4)>>2;
|
|
||||||
month_=(int)(5*d-3)/153;
|
|
||||||
d=5*d-3-153*month_;
|
|
||||||
day_=(int)((d+5)/5);
|
|
||||||
year_=(int)(100*year_+j);
|
|
||||||
if (month_<10) month_+=3;
|
|
||||||
else { month_-=9; year_++; }
|
|
||||||
}
|
|
||||||
|
|
||||||
int Calendar::dayInWeek(void)
|
|
||||||
{
|
|
||||||
return ((((_currdate+1)%7)+6)%7)+1;
|
|
||||||
}
|
|
||||||
|
|
||||||
Calendar &Calendar::nextWeekday(void)
|
|
||||||
{
|
|
||||||
(*this) += 1;
|
|
||||||
while (!isWeekday()) (*this)+= 1;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
int Calendar::isWeekday(void)
|
|
||||||
{
|
|
||||||
return (dayInWeek()<6)?1:0;
|
|
||||||
}
|
|
||||||
|
|
||||||
Calendar &Calendar::operator+= (int incr_)
|
|
||||||
{
|
|
||||||
_currdate += incr_;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
ostream &operator<< (ostream &os_, Calendar &that_)
|
|
||||||
{
|
|
||||||
int mo, day, year;
|
|
||||||
that_.split(mo,day,year);
|
|
||||||
os_ << year << "-" << mo << "-" << day;
|
|
||||||
// the below is a pain for monetdb
|
|
||||||
//os_ << mo << "/" << day << "/" << year;
|
|
||||||
return os_;
|
|
||||||
}
|
|
Loading…
Reference in new issue