Als Ergebnis des Jahr-2038-Problems (https://en.wikipedia.org/wiki/Year_2038_problem) erhalten wir nach Aufruf von os.time ({Jahr = 2039, Monat = 1, Tag = 1, Stunde = 0, Sekunde = 1}) auf einer 32-Bit-Maschine keine Antwort. Wie kann man es in der Lua-Ebene kompatibel machen und Ergebnisse erhalten, wie auf einer 64-Bit-Maschine zu laufen? Ist es möglich, eine Funktion wie die folgende zu schreiben? Ansonsten, wie erreiche ich das?Wie macht man os.time() Kompatibilität auf einer 32bit Maschine in Lua 5.1?
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
Wie schreibe ich calculateDeltaTime()?
Umschalttaste das Jahr mit einem Minus von 'N' 4 * und als Add' N * Anzahl der Sekunden in 4 Jahren 'zu dem Ergebnis –
Gute Idee! Und es gibt ein Problem, etwa Schaltjahr. "Jedes Jahr, das genau durch vier teilbar ist, ist ein Schaltjahr, ausgenommen Jahre, die genau durch 100 teilbar sind, aber diese Jahrhundertjahre sind Schaltjahre, wenn sie genau durch 400 teilbar sind. Zum Beispiel die Jahre 1700, 1800 und 1900 waren keine Schaltjahre, aber die Jahre 1600 und 2000 waren. " – youzhiwan
@youzhiwan - Im Bereich 1970-2038 sind alle durch 4 teilbaren Jahre Schaltjahre. –