[LUA] Zeit/Datum addieren

03/28/2014 14:08 AT0MiX#1
Hallo,

irgendwie werd ich in Google nicht fündig.

Ich würde gerne zu Beginn das momentane Datum bekommen (mit Sekunden). Und danach Sekunden zu diesem Datum hinzufügen, sodass ein neues Datum rauskommt, welches in der Zukunft liegt.

Wie stell ich das in LUA an ?

Hab mir os.clock() herumprobiert, das sind aber keine Daten sondern nur Nummern, da funktioniert das addieren nicht.

Mit io.date() funktionierts scheinbar irgendwie, aber ich komm nicht drauf. Er wirft mir auch immer einen Fehler, und sagt, dass die Variable leer ist, in die im io.date() reinschreiben möchte.

Ruf ich sie möglicherweise falsch auf?

LG
AT0MiX
03/28/2014 18:53 Tyrar#2
Wie steht das jetzt genau in Verbindung mit C oder C++?
03/28/2014 20:36 AT0MiX#3
Hab keine passende Sektion gefunden, dachte das passt noch am ehesten und hier könnten Leute reinschauen, die das noch am ehesten beantworten können ;)

Wenn es falsch ist, dann einfach moven...
03/29/2014 22:01 Black Tiger ツ#4
Welches LUA framework?

local timeTable = os.date("*t")
print (timeTable.sec)
print (timeTable.min)
print (timeTable.hour)

PS: local, da LUA dynamische Variablen benutzt. C++ z.B. benutzt lexikalische.
03/31/2014 21:13 jacky919#5
Quote:
Originally Posted by Black Tiger ツ View Post
Welches LUA framework?

local timeTable = os.date("*t")
print (timeTable.sec)
print (timeTable.min)
print (timeTable.hour)

PS: local, da LUA dynamische Variablen benutzt. C++ z.B. benutzt lexikalische.
Lua verwendet dynamische Typisierung und C++ statische Typisierung.
03/31/2014 22:23 Black Tiger ツ#6
Quote:
Originally Posted by jacky919 View Post
Lua verwendet dynamische Typisierung und C++ statische Typisierung.
Hab ich doch gesagt?
03/31/2014 22:24 jacky919#7
Quote:
Originally Posted by Black Tiger ツ View Post
Hab ich doch gesagt?
Du hattest was von lexikalisch gesagt, wollte das nur korrigieren.
03/31/2014 22:32 Black Tiger ツ#8
Quote:
Originally Posted by jacky919 View Post
Du hattest was von lexikalisch gesagt, wollte das nur korrigieren.
Statisch gebundene und lexikalische ist doch das selbe, oder lieg ich da falsch?
04/01/2014 00:06 Tasiro#9
Quote:
Originally Posted by Black Tiger ツ View Post
PS: local, da LUA dynamische Variablen benutzt. C++ z.B. benutzt lexikalische.
Den Begriff "dynamische Variable" lese ich hier das erste Mal. Mit "lexikalisch" wird für gewöhnlich ein statischer Gültigkeitsbereich assoziiert, keine statische Typisierung - denn eine "lexikalische Typisierung" gibt es nicht, wohl aber einen lexikalischen, also statischen Gültigkeitsbereich.
04/01/2014 23:28 MrSm!th#10
#moved
04/05/2014 21:54 Lord iRemix#11
Gibt extra eine Funktion dafür :D

Code:
zeit = os.time()
print(os.difftime(os.time(), zeit))
04/05/2014 22:43 IchVerabschiedeMich#12
[Only registered and activated users can see links. Click Here To Register...]
04/06/2014 00:42 Lord iRemix#13
Hatte mal Langeweile und hab's ihm vorgeschrieben.
Er wollte ja sozusagen ein neues Datum - hoffe hab seine Wünsche getroffen.

Code:
local clock = os.clock
function sleep(n)
  local t = clock()
  while clock() - t <= n do end
end

function explode(div,str) -- credit: http://richard.warburton.it
  if (div=='') then return false end
  local pos,arr = 0,{}
  for st,sp in function() return string.find(str,div,pos,true) end do
    table.insert(arr,string.sub(str,pos,st-1))
    pos = sp + 1
  end
  table.insert(arr,string.sub(str,pos))
  return arr
end

local first = os.date("%c")
sleep(2)
local second = os.date("%c")
local tab = explode(" ", first)
local tab2 = explode(" ", second)

local seconds1 = explode(":", tab[2])
local seconds2 = explode(":", tab2[2])
local date1 = explode("/", tab[1])
local date2 = explode("/", tab2[1])


metaT={}
metaT.__add = function(table1, table2)
	local tab = {}
	tab[1] = table1[1] + table2[1]
	tab[2] = table1[2] + table2[2]
	tab[3] = table1[3] + table2[3]
	return tab
end
setmetatable(seconds2, metaT)
setmetatable(date2, metaT)

local new_second = seconds2 + seconds1
local new_date = date2 + date1

local seconds = {24,60,60}
for i = 3, 1, -1 do
	while new_second[i] >= seconds[i] do
		if i ~= 1 then
			new_second[i] = new_second[i] - seconds[i]
			new_second[i-1] = new_second[i-1] + 1
		else
			new_date[2] = new_date[2] + 1
		end
	end
end

local days = {99999999, 31, 12}
local new_sets = {3,1,2}
for i = 2, 1, -1 do
	while new_date[i] >= days[i] do
		new_date[i] = new_date[i] - days[i]
		new_date[new_sets[i]] = new_date[new_sets[i]] + 1
	end
end

for _,v in ipairs(new_second) do
	if v < 10 then new_second[_] = "0"..new_second[_] end
end

for _,v in ipairs(new_date) do
	if v < 10 then new_date[_] = "0"..new_date[_] end
end

local out = new_date[1].."/"..new_date[2].."/"..new_date[3].." "..new_second[1]..":"..new_second[2]..":"..new_second[3]

print(out)



--> 08/12/28 04:18:34
04/06/2014 13:13 Shawak#14
^umständlicher ging es nicht

Schau dir doch mal bitte genau an was os.time zurückgibt, dass sind nicht einfach nur irgendwelche Zahlen.

Einfach nur zwei os.time mit einem os.date verbinden und du hast was du wolltest, dafür braucht man fünf Zeilen inc. einem sleep zum Testen.
04/06/2014 13:57 Lord iRemix#15
Quote:
Originally Posted by Shawak View Post
^umständlicher ging es nicht

Schau dir doch mal bitte genau an was os.time zurückgibt, dass sind nicht einfach nur irgendwelche Zahlen.

Einfach nur zwei os.time mit einem os.date verbinden und du hast was du wolltest, dafür braucht man fünf Zeilen inc. einem sleep zum Testen.
Wie erwähnt: hatte Langeweile - gab so spät nichts mehr zu tun.
Aber es funktioniert genau so gut Lua's hauseigene Funktionen und ich wette es geht noch umständlicher :D