How to make os.time() compatibility on a 32bit machine in Lua 5.1?
snippet in lua

How to make os.time() compatibility on a 32bit machine in Lua 5.1?

user1150

local orig_os_time = os.time

function os.time(timeTable)
   if timeTable then
      -- assume that all years divisible by 4 are leap years
      local four_year_ctr = math.floor((timeTable.year - 2000) / 4)
      timeTable.year = timeTable.year - four_year_ctr * 4
      local result = orig_os_time(timeTable) + four_year_ctr * ((365*4+1)*24*60*60)
      timeTable.year = timeTable.year + four_year_ctr * 4
      -- make a correction for non-leap years 2100,2200,2300, 2500,2600,2700,...
      -- subtract ("March 1, 2000" - 12 hours) and divide by 100 "wrong" years
      -- It should work for all time zones from UTC-1200 to UTC+1200
      local centuries = math.floor((result - (951868800 - 12*60*60)) / (25*(365*4+1)*24*60*60))
      local wrong_feb29_ctr = math.floor((centuries * 6 + 7) / 8)
      return result - wrong_feb29_ctr * (24*60*60)
   else
      return orig_os_time()
   end
end

-- Example:
print(os.time{year = 1002017, month = 9, day = 27, hour = 0, min = 0, sec = 0})
-- Will Lua be alive after million years?
-- Will 32-bit Linux systems be alive after 2038?