The problem stems from the common definition of the time_t as an integer containing the number of seconds since midnight, January 1, 1970. Most C/C++ runtime libraries define time_t as a long int. On most systems, long int is 32 bits, which means that we've got a range of 2^31-1 (2,147,483,647) secondsuntil sometime on January 18, 2038. (Assuming Dr. GUI's Windows CE Palm-size PC has it right, that's a Monday. Figures.)
Since the number is signed, when the clock rolls over the time will be a very large negative number, giving us a time warp of a little over 136 yearswe'll flip back to sometime late in December, 1901."
Dr. GUI, "All Ready for 2000 and the Euro? What About 2038?," MSDN Online Buzz
Y2K leap year bug