i have a c++ code by which i can compute/manipulate starting from an input excel date (by manipulate i mean i can increase/decrease the input date by specific increments or do other computations on it).
i use the variable time_t in my code. accroding to msdn documentation time_t is the number of seconds elaspsed since 01/01/1970. so given an input date i first compute the elasped seconds since 01/01/1970, store it in a time_t vcariable and later use localtime() for all other computation.
my code works fine as along as my input date is more than 01/01/1970 but breaks down for dates before that.
question: is there any other variable or structure using which i can go before 01/01/1970. or is there a way to manipulate the time_t variable to go before 01/01/1970.
thanks in advance
i start with 02/01/1970. i want to decrease the month by 2. first i use
void localtime(int* py = 0, int* pm = 0, int* pd = 0,
int* ph = 0, int* pn = 0, int* ps = 0,
int* pwday = 0, int* pyday = 0, int* pisdst = 0) const
{
struct tm* ptm = ::localtime(&t_);
if (py) *py = ptm->tm_year + 1900;
if (pm) *pm = ptm->tm_mon + 1;
if (pd) *pd = ptm->tm_mday;
if (ph) *ph = ptm->tm_hour;
if (pn) *pn = ptm->tm_min;
if (ps) *ps = ptm->tm_sec;
if (pwday) *pwday = ptm->tm_wday;
if (pyday) *pyday = ptm->tm_yday;
if (pisdst) *pisdst = ptm->tm_isdst;
}
then i use: maketime(y, m + count, d, h, n, s); where y=1970, m=2, count=-2, d=1 (from the output of the above code. the maketime() is as follows:
void maketime(int y, int m, int d, int h = 0, int n = 0, int s = 0)
{
struct tm t;
t.tm_year = y - 1900;
t.tm_mon = m - 1;
t.tm_mday = d;
t.tm_hour = h;
t.tm_min = n;
t.tm_sec = s;
t.tm_isdst = -1;
t_ = ::mktime(&t);
}
this results in t_ =-1.
now on this result i call localtime() again and
struct tm* ptm = ::localtime(&t_);
the first line inside localtime() fails when t_ = -1.