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

Korrekte Zeit auch auf Android

docfred

Geocacher
Hallo zusammen,
das Zeitproblem auf den unterschiedlichen Geräten UTC vs. MEZ/MESZ hat mir keine Ruhe gelassen. Deshalb habe ich jetzt eine Routine geschrieben, die basierend auf die UTC-Zeit ( os.date("!*t") ) die korrekte Zeit errechnet.
Der erste Teil berechnet, an welchen Tagen MESZ gilt und an welchen nicht. Der zweite Teil korrigiert auf MEZ oder MESZ.
Die Formel berechnet auch die Verschiebung auf den neuen Tag/neuen Monat/neuesJahr, wenn kurz vor Mitternacht, wenn notwendig.
Ich habe es im Emulator und unter Android mit verschiedenen Daten (Datums) getestet und es scheint zu funktionieren.
Alle die Interesse haben, bitte die Funktion ausgiebig zu testen. Die Funktion liefert eine table zurück, (wie os.date("*t") ). Zusätzlich gibts noch das Flag .leapyear und den String .zone. Das Flag .isdst wird auch befüllt.

Code:
function correct_time()
	local time = os.date("!*t")
	local max_month = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
      if time.year /4 == math.floor(time.year /4) then
      		max_month[2] = 29
      		time.leapyear = true
      	else
      		time.leapyear = false
      	end
 	--Ermitteln ob SZ	
	if time.month  < 3 or time.month > 10 then -- Monate ohne SZ
		time.isdst = false
	elseif time.month > 3 and time.month < 10 then -- Monate mit SZ
		time.isdst = true
	elseif time.month == 3 then 
		if (time.day - time.wday) < 24 then
			time.isdst = false
		else
			if time.wday == 1 and time.hour < 2 then -- Sonntag und vor 2Uhr
				time.isdst = false
			else
				time.isdst = true
			end
		end
	elseif time.month == 10 then
		if (time.day - time.wday) < 24 then
			time.isdst = true
		else
			if time.wday == 1 and time.hour < 2 then --Am Schalttag vor 2 Uhr
				time.isdst = true
			else
				time.isdst = false
			end
		end
	end
	
	-- Neues Datum berechnen
	print(time.isdst)
	time.hour = time.hour + 1 -- +1 für UTC+1
	if time.isdst == true  then
		time.zone = "MESZ"
		time.hour = time.hour + 1 -- +1 für Sommerzeit
	else
		time.zone = "MEZ"
	end
	if time.hour > 23 then --Neuer Tag
		time.hour = time.hour -24
		time.day = time.day + 1 
		
		time.wday = time.wday +1
		if time.wday == 8 then
			time.wday = 1
		end 
		
		if time.day > max_month[time.month] then -- Neuer Monat
			time.day = 1
			time.month = time.month +1
			if time.month > 12 then -- Neues Jahr
				time.month = 1
				time.year = time.year +1
			end
		end
	end
	return time -- Liefert einen table zurück wie os.date. zusätzlich noch time.leapyear und time.zone
end

Bitte um Rückmeldung, wenn was nicht richtig funktioniert.
docfred

URWIGO-File ist im Anhang.
 

Anhänge

  • Korrekte_Zeit.zip
    2,1 KB · Aufrufe: 15
Oben