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?