• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

Berechnung Tag oder Nacht

Anders

Geocacher
Moin, vielleicht kann es ja der ein oder andere gebrauchen. z.B. für einen Wherigo Nachcache, der überprüfen soll, ob es überhaupt Nacht ist oder um zu verhindern, dass ein Cache in der Nacht gemacht wird.
Der Code errechnet anhand Länge, Breite und Datum den Zeitpunkt des Sonnenunterganges oder Aufganges und gibt auch noch die verbleibende zeit bis zum Untergang zurück.

Code:
function IstNachSonnenuntergang()
	local Jetzt=os.date("!*t")
	local DR = math.pi / 180
	local RD = 1 / DR
	local Breite = 52.1
	local Laenge = 8.1
	local M = Jetzt.month
	local D = Jetzt.day
	Breite = DR * Breite
	local L0 = 4.8771 + 0.0172 * ((math.floor(275 * M / 9) - 2 * math.floor((M + 9) / 12) + D - 30) + 0.5 - Laenge / 360)
	local C = 0.03342 * math.sin(L0 + 1.345)
	local C2 = RD * (math.atan(math.tan(L0 + C)) - math.atan(0.9175 * math.tan(L0 + C)) - C)
	local SD = 0.3978 * math.sin(L0 + C)
	local SC = (SD * math.sin(Breite) + 0.0145) / (math.cos(Breite) * (math.sqrt(1 - SD * SD)))
	local C3 = RD * math.atan(SC / math.sqrt(1 - SC * SC))
	local R1 = 6 - (Laenge + C2 + C3) / 15
	local HR = math.floor(R1)
	local MR = math.floor((R1 - HR) * 60)
	local S1 = 18 - (Laenge + C2 - C3) / 15
	local HS = math.floor(S1)
	local MS = math.floor((S1 - HS) * 60)
	local MinDesTages = Jetzt.hour * 60 + Jetzt.min
	local MinDesTagesAufgang = HR * 60 + MR
	local MinDesTagesUntergang = HS * 60 + MS
	local ss1 = "Tag   "..HR..":"..MR.."   "..Jetzt.hour..":"..Jetzt.min.."   "..HS..":"..MS
	local ss2 = "Nacht   "..HR..":"..MR.."   "..Jetzt.hour..":"..Jetzt.min.."   "..HS..":"..MS
	local NochStunden = math.floor((MinDesTagesUntergang - MinDesTages)/60)
	local NochMinuten = (MinDesTagesUntergang - MinDesTages) % 60
	obj_minuten = NochMinuten
	obj_stunden = NochStunden
	if MinDesTages < MinDesTagesUntergang and MinDesTages > MinDesTagesAufgang then
		obj_SpielAktiv = false
	else
		obj_Spielaktiv = true
	end
	return
end
 

ch3ka

Geocacher
Code:
os.date
nimmt die Systemzeit, die kann man einfach umstellen, oder? Kommt man irgendwie an die GPS-Zeit ran? Die kann man zwar auch faken, aber wenigstens nicht so einfach ;)
 

Charlenni

Geomaster
Und noch eine Frage: die option "!*t" habe ich noch nie in Lua gesehen, "*t" schon. Kann mir jemand erklären, für was das "!" ist?
 

docfred

Geocacher
os.date("*t*) liefert die aktuelle Zeit incl. Zone und Sommerzeit
Früher zumindest hat diese Funktion bei WYG trotzdem UTC geliefert

os.date("!*t*) liefert immer UTC, was GMT entspricht

MEZ = UTC+1
MESZ =UTC+2

http://www.das-wherigo-handbuch.de/index.php?title=Unterschiedliches_Verhalten_einzelner_WIG-Player
------------------------------------------------
Lua 5.,1
os.date ([format [, time]])

Returns a string or a table containing date and time, formatted according to the given string format.
If the time argument is present, this is the time to be formatted (see the os.time function for a description of this value). Otherwise, date formats the current time.

If format starts with '!', then the date is formatted in Coordinated Universal Time. After this optional character, if format is the string "*t", then date returns a table with the following fields: year (four digits), month (1--12), day (1--31), hour (0--23), min (0--59), sec (0--61), wday (weekday, Sunday is 1), yday (day of the year), and isdst (daylight saving flag, a boolean).
 
OP
A

Anders

Geocacher
Die zeit vom GPS Empfänger hätte ich auch gerne. Das mit dem faken klappt nämlich so leider wirklich. Aber dafür hatte ich keine Lösung gefunden.
 

docfred

Geocacher
Es gibt Programme die, die Systemzeit mittels der Zeit von den GPS-Satelliten synchronisieren. Das ist dann ab wieder die Systemzeit. Einen direkten Zugriff vom Player gibt es m.E. nicht. Und wenn, dann wüsste das Charlenni.
docfred
 

FSNTL

Geocacher
Wie nutze ich die Funktion denn dann?

brauche ich eine Variable oder einen Gegenstand?

Wo landet das Ergebniss?
 
Oben