由于2038年问题(https://en.wikipedia.org/wiki/Year_2038_problem),在32位机器上调用os.time({year = 2039,month = 1,day = 1,hour = 0,sec = 1})后,我们得到零。如何使它在lua层兼容,并获得像运行在64位机器上的结果? 是否可以编写如下的函数?否则,如何实现它?如何在Lua 5.1的32位机器上使os.time()兼容?
local function time32Compatibility(timeTable)
local kMaxYearIn32Bit = 2037;
if timeTable and timeTable.year and timeTable.year >= kMaxYearIn32Bit then
local originalTable = clone(timeTable);
timeTable.year = kMaxYearIn32Bit;
local deltaTime = calculateDeltaTime(timeTable,originalTable)
return os.time(timeTable) + kMaxYearIn32Bit*;
else
return os.time(timeTable);
end
end
如何写calculateDeltaTime()?
将年份向下移动'4 * N'并且在结果中添加'N *秒数'到结果 –
好主意!还有一个问题,就是闰年。 “除了可以被100整除的年份以外,每年可以被四整除的年份是闰年,但是如果它们可以被400整除,这些百年闰年就是闰年。例如,1700年,1800年和1900年不是闰年,而是1600年和2000年。“ – youzhiwan
@ youzhiwan - 在1970-2038年范围内,所有可以被4整除的年份都是闰年。 –