Editing Module:D'ni Time
From Guild of Archivists
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
local p = {} | local p = {} | ||
Line 12: | Line 4: | ||
local origArgs | local origArgs | ||
local root | local root | ||
local leapSecTimeStamps = {2272060800, 2287785600, 2303683200, 2335219200, 2366755200, 2398291200, 2429913600, 2461449600, 2492985600, 2524521600, 2571782400, 2603318400, 2634854400, 2698012800, 2776982400, 2840140800, 2871676800, 2918937600, 2950473600, 2982009600, 3029443200, 3076704000, 3124137600, 3345062400, 3439756800, 3550089600, 3644697600, 3692217600} | local leapSecTimeStamps = {2272060800, 2287785600, 2303683200, 2335219200, 2366755200, 2398291200, 2429913600, 2461449600, 2492985600, 2524521600, 2571782400, 2603318400, 2634854400, 2698012800, 2776982400, 2840140800, 2871676800, 2918937600, 2950473600, 2982009600, 3029443200, 3076704000, 3124137600, 3345062400, 3439756800, 3550089600, 3644697600, 3692217600} | ||
local LeapSecOffset = 10 | local LeapSecOffset = 10 | ||
local function ConvertLeapSecTimeStamps() | local function ConvertLeapSecTimeStamps() | ||
delta = os.time({year=1900, month=1, day=1, hour=0, min=0}) | delta = os.time({year=1900, month=1, day=1, hour=0, min=0}) | ||
for key,value in pairs(leapSecTimeStamps) do | for key,value in pairs(leapSecTimeStamps) do | ||
Line 34: | Line 17: | ||
local function AdjustForLeapSeconds(timestamp) | local function AdjustForLeapSeconds(timestamp) | ||
leapsecs = 0 | leapsecs = 0 | ||
for key,value in pairs(leapSecTimeStamps) do | for key,value in pairs(leapSecTimeStamps) do | ||
Line 48: | Line 30: | ||
local function DejustForLeapSeconds(timestamp) | local function DejustForLeapSeconds(timestamp) | ||
leapsecs = 0 | leapsecs = 0 | ||
for key,value in pairs(leapSecTimeStamps) do | for key,value in pairs(leapSecTimeStamps) do | ||
if timestamp >= value then | if timestamp >= value then | ||
leapsecs = leapsecs | leapsecs = leapsecs - 1 | ||
end | end | ||
end | end | ||
Line 58: | Line 39: | ||
leapsecs = leapsecs + (LeapSecOffset - 1) | leapsecs = leapsecs + (LeapSecOffset - 1) | ||
end | end | ||
return timestamp | return timestamp + leapsecs | ||
end | end | ||
local function makeSurfaceTimeStamp(timeStampTable) | local function makeSurfaceTimeStamp(timeStampTable) | ||
temp = os.time(timeStampTable) | temp = os.time(timeStampTable) | ||
-- return temp | |||
return AdjustForLeapSeconds(temp) | return AdjustForLeapSeconds(temp) | ||
end | end | ||
ConvertLeapSecTimeStamps() | |||
local refTimeStampPre = os.time({year=1991, month=4, day=21, hour=16, min=54}) | |||
local refTimeStamp = makeSurfaceTimeStamp({year=1991, month=4, day=21, hour=16, min=54}) | local refTimeStamp = makeSurfaceTimeStamp({year=1991, month=4, day=21, hour=16, min=54}) | ||
local refDniHahr = 9647 | |||
local msPerHahr = 31556925216 | |||
local prorahnteePerHahr = 10 * 29 * 5 * 25 * 25 * 25 | |||
local msPerProrahn = msPerHahr / prorahnteePerHahr | |||
local refProrahnteePerHahr = 9647 * 290 * 5 * 25 * 25 * 25 | |||
local function displaySurfaceTime(time) | |||
surface = os.date("*t",time) | |||
return '{'..'year = '..surface['year']..', month = '..surface['month']..', day = '..surface['day']..', hour = '..surface['hour']..', min = '..surface['min']..', sec = '..surface['sec']..'}' | |||
-- isdst = '..surface['isdst'].toString()..'}' | |||
end | |||
local function displayDniTime(dniTime) | |||
return '{'..'hahr = '..dniTime['hahr']..', vailee = '..dniTime['vailee']..', yahr = '..dniTime['yahr']..', gartahvo = '..dniTime['gartahvo']..', tahvo = '..dniTime['tahvo']..', gorahn = '..dniTime['gorahn']..', prorahn = '..dniTime['prorahn']..'}' | |||
-- isdst = '..surface['isdst'].toString()..'}' | |||
end | end | ||
local function setFromSurfaceDate(surface) | |||
dniTime = {} | |||
surfaceTimeStamp = makeSurfaceTimeStamp(surface) | |||
delta = (surfaceTimeStamp - refTimeStamp) * 1000 | delta = (surfaceTimeStamp - refTimeStamp) * 1000 | ||
Line 160: | Line 92: | ||
delta = delta - (dniTime['yahr'] * (5 * 25 * 25 * 25)) | delta = delta - (dniTime['yahr'] * (5 * 25 * 25 * 25)) | ||
dniTime[' | dniTime['gartahvo'] = math.floor(delta / (25 * 25 * 25)) | ||
delta = delta - (dniTime[' | delta = delta - (dniTime['gartahvo'] * (25 * 25 * 25)) | ||
dniTime['tahvo'] = math.floor(delta / (25 * 25)) | dniTime['tahvo'] = math.floor(delta / (25 * 25)) | ||
Line 171: | Line 103: | ||
dniTime['prorahn'] = math.floor(delta) | dniTime['prorahn'] = math.floor(delta) | ||
return dniTime | return dniTime | ||
end | end | ||
local function preprocessSingleArg(argName) | local function preprocessSingleArg(argName) | ||
Line 208: | Line 114: | ||
end | end | ||
function | local function preprocessArgs(prefixTable, step) | ||
-- | -- Assign the parameters with the given prefixes to the args table, in order, in batches | ||
-- | -- of the step size specified. This is to prevent references etc. from appearing in the | ||
if | -- wrong order. The prefixTable should be an array containing tables, each of which has | ||
-- two possible fields, a "prefix" string and a "depend" table. The function always parses | |||
-- parameters containing the "prefix" string, but only parses parameters in the "depend" | |||
-- table if the prefix parameter is present and non-blank. | |||
if type(prefixTable) ~= 'table' then | |||
error("Non-table value detected for the prefix table", 2) | |||
end | |||
if type(step) ~= 'number' then | |||
error("Invalid step value detected", 2) | |||
end | end | ||
-- Get arguments without a number suffix, and check for bad input. | |||
for i,v in ipairs(prefixTable) do | |||
if type(v) ~= 'table' or type(v.prefix) ~= "string" or (v.depend and type(v.depend) ~= 'table') then | |||
error('Invalid input detected to preprocessArgs prefix table', 2) | |||
end | |||
preprocessSingleArg(v.prefix) | |||
-- Only parse the depend parameter if the prefix parameter is present and not blank. | |||
if args[v.prefix] and v.depend then | |||
for j, dependValue in ipairs(v.depend) do | |||
if type(dependValue) ~= 'string' then | |||
error('Invalid "depend" parameter value detected in preprocessArgs') | |||
end | |||
preprocessSingleArg(dependValue) | |||
end | |||
end | |||
end | end | ||
-- Get arguments with number suffixes. | |||
local a = 1 -- Counter variable. | |||
local moreArgumentsExist = true | |||
while moreArgumentsExist == true do | |||
moreArgumentsExist = false | |||
for i = a, a + step - 1 do | |||
for j,v in ipairs(prefixTable) do | |||
local prefixArgName = v.prefix .. tostring(i) | |||
if origArgs[prefixArgName] then | |||
moreArgumentsExist = true -- Do another loop if any arguments are found, even blank ones. | |||
preprocessSingleArg(prefixArgName) | |||
end | |||
-- Process the depend table if the prefix argument is present and not blank, or | |||
-- we are processing "prefix1" and "prefix" is present and not blank, and | |||
-- if the depend table is present. | |||
if v.depend and (args[prefixArgName] or (i == 1 and args[v.prefix])) then | |||
for j,dependValue in ipairs(v.depend) do | |||
local dependArgName = dependValue .. tostring(i) | |||
preprocessSingleArg(dependArgName) | |||
end | |||
end | |||
end | |||
end | |||
a = a + step | |||
end | end | ||
end | end | ||
Line 289: | Line 183: | ||
-- Parse the data parameters | -- Parse the data parameters | ||
output = os.time({year=1900, month=1, day=1, hour=0, min=0}) .. "<br/>" .. refTimeStampPre .. "<br/>" .. refTimeStamp .."<br/>" .. displaySurfaceTime(refTimeStamp) | |||
output = output .. "<br/>" .. displaySurfaceTime(63100800) .. "<br/>" | |||
output = output .. setFromSurfaceDate(makeSurfaceTimeStamp({year=1991, month=4, day=21, hour=16, min=54})) .."<br/>---" | |||
return output | return output |