Wordclock/unit/unix2time.lua
2016-05-14 00:22:47 +02:00

84 lines
1.5 KiB
Lua

---
-- Source:
-- http://www.jbox.dk/sanos/source/lib/time.c.html
YEAR0=1900
EPOCH_YR=1970
--SECS_DAY=(24L * 60L * 60L)
SECS_DAY=86400
ytab = {}
ytab[0] = {}
ytab[1] = {}
ytab[0][0] = 31
ytab[0][1] = 28
ytab[0][2] = 31
ytab[0][3] = 30
ytab[0][4] = 31
ytab[0][5] = 30
ytab[0][6] = 31
ytab[0][7] = 31
ytab[0][8] = 30
ytab[0][9] = 31
ytab[0][10] = 30
ytab[0][11] = 31
ytab[1][0] = 31
ytab[1][1] = 29
ytab[1][2] = 31
ytab[1][3] = 30
ytab[1][4] = 31
ytab[1][5] = 30
ytab[1][6] = 31
ytab[1][7] = 31
ytab[1][8] = 30
ytab[1][9] = 31
ytab[1][10] = 30
ytab[1][11] = 31
leapyear = function(year)
return ( not ((year) % 4) and (((year) % 100) or not ((year) % 400)))
end
yearsize = function(year)
if leapyear(year) then
return 366
else
return 365
end
end
gettime = function(unixtimestmp)
local year = EPOCH_YR
local dayclock = math.floor(unixtimestmp % SECS_DAY)
local dayno = math.floor(unixtimestmp / SECS_DAY)
local sec = dayclock % 60
local min = math.floor( (dayclock % 3600) / 60)
local hour = math.floor(dayclock / 3600)
local wday = math.floor( (dayno + 4) % 7) -- Day 0 was a thursday
while (dayno >= yearsize(year))
do
dayno = dayno - yearsize(year);
year=year + 1
end
local yday = dayno
local mon = 0
isleap=0 if leapyear(year) then isleap=1 end
while (dayno >= ytab[isleap][mon])
do
dayno = dayno - ytab[isleap][mon];
mon = mon + 1
isleap=0 if leapyear(year) then isleap=1 end
end
mday = dayno + 1
return year, mon, mday, hour, min, sec, wday
end
print( gettime(1462391501) )