• Bitte schaltet eure Ad Blocker aus. SLinfo kann nur betrieben werden, wenn es durch Werbung Einnahmen erzielt. Vielen Dank!!
  • Wir freuen uns, wenn du dich in unserem Forum anmeldest. Bitte beachte, dass die Freigabe per Hand durchgeführt wird (Schutz vor Spammer). Damit kann die Freigabe bis zu 24 Stunden dauern.
  • Wir verwenden Cookies, um Inhalte und Anzeigen zu personalisieren, Funktionen für soziale Medien anbieten zu können und die Zugriffe auf unsere Website zu analysieren. Sie geben Einwilligung zu unseren Cookies, wenn Sie unsere Webseite weiterhin nutzen.

llGetGMTclock automatisch winter-/sommerzeit

Hallo hab mal wieder ein problem
benutze für eine uhr llGetGMTclock. wie schaffe ich es jetzt, daß die zeit automatisch zum richtigen datum von winterzeit zu sommerzeit und umgekehrt gewechselt wird ????
 

Noctua Janus

Superstar
Mit GMT wohl gar nicht, die ist nämlich als eine durchgehende Zeit per Definition, im Sommer haben die Engländer nämlich nicht GMT sondern BST (British Summer Time).

llGetUnixTime sollte wohl umschalten - ist allerdings gewöhnungbedürftig, da es die Zeit seit dem 1 Januar 1970 mißt.
 
-->> llGetWallclock
das ist im Prinzip das selbe, nur eben SL Time (PST)
und da ändern sich die Zeiten automatisch.


takeshi ändern sich denn die zeiten am selben Tag wie in deutschland ????
 
H

Hoerman Hermans

Guest
zaphod Enoch schrieb:
besteht denn nicht die möglichkeit aus sl raus durch en deutschen timeserver die zeit zu synchronisieren ????????
Hi,
das ist eigentlich überhaupt kein Problem, wenn einem ein delay von ein paar Sekunden egal ist. Allerdings geben, meines Wissens nach, alle timeserver die Zeit ohne Berücksichtigung der Sommer- und Winterzeit an.

Gruß Hoerman
 
Was haltet ihr denn mal davon einfach selbst eine Funktion zu schreiben die überprüft ob Sommerzeit oder Winterzeit angesagt ist?

Können wir ja mal hier zusammen versuchen!

Folgende Regel gilt:
Sommerzeitanfang (in Deutschland): letzter Sonntag im März von 2 Uhr auf 3 Uhr
Sommerzeitende (in Deutschland): letzer Sonntag im Oktober von 3 Uhr auf 2 Uhr.

GMT +1 = Winterzeit
GMT +2 = Sommerzeit

Das bedeutet wir brauchen nur überprüfen ob der aktuelle Zeitpunkt zwischen den beiden Zeitpunkten liegt.

Sodele, nu mach ich mir mal Gedanken über den tatsächlichen Code :)

MfG
Hannibal

Edit: Hab gerade einen brauchbaren Codeschnipsel in meinem Fundus gefunden :)
Code:
string Wochentag(integer Monat, integer Tag, integer Jahr)
{
	list Tagesnamen = ["Samstag", "Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag"];
	if (Monat < 3)
	{
		Monat += 12;
		Jahr -= 1;
	}
	integer Index = (Tag + 2* Monat + (3*(Monat + 1))/5 + Jahr + Jahr /4 - Jahr/100 + Jahr/400 + 2) % 7;
	string str = llGetSubString(llList2String(Tagesnamen, Index), 0, -1);
	return str;
}

Also die Berechnung stammt nicht von mir, liefert aber wunderbar den Wochentag zurück.
Jetzt fehlt noch eine Funktion um zu überprüfen ob der aktuelle Sonntag denn nu auch der letzte Sonntag im jeweiligen Monat ist.
Jemand nen Vorschlag?
 
des ist nicht das richtige problem hannibal

danke für die antworten aber ich glaub das des problem nicht automatisch zu lösen ist, das liegt an folgenden fakten:

a) da ich nicht weiss, wer ne uhr kauft und aus welcher zeitzone, muss dem käufer mindestens die möglichkeit gegeben werden seine zeitzone einzugeben.

b) dann kann er auch gleich seinen gmt zeitzonen unterschied in ne notecard eingeben (da eingabe immer notwendig ist)

c) ein abruf eines lokalen zeitservers von sl nach ausserhalb scheint nicht möglich zu sein

d) bei 36 zeitzonen und den dazugehörigen sommer-/ winterzeitumstellungen ist der aufwand hier alles abzufragen einfach zu aufwendig

also hab ich mich entschlossen, dass jeder käufer seine uhr so über ne notecard einstellen kann ie er/sie möchte

vielen dank für eure antworten
zap
 

Kottos Sperber

Freund/in des Forums
Hannibal Hudson schrieb:
Was haltet ihr denn mal davon einfach selbst eine Funktion zu schreiben die überprüft ob Sommerzeit oder Winterzeit angesagt ist?

Können wir ja mal hier zusammen versuchen!

Ja.

Ich habe für meine gerade gebastelte Uhr eine Funktion erstellt, die den offset zur GMT zurückgibt, also fuer Sommerzeit + 2 und Winterzeit + 1.
Das Datum der Zeitumstellung, letzter Sonntag im März und letzter Sonntag im Oktober wird automatisch ermittelt.
Der Algorithmus basiert auf der Gaußschen Osterformel.
Wie zaphod schon schrieb, es ist eher eine akademische denn praktische Funktion. Die enthaltene Zeitumstellung ist nur für D und einigen anderen europäischen Ländern gültig. Also nicht ausreichend, wenn man die Uhr verkaufen will.

Code:
integer GMT_offset(string timestamp)
{
        // use return value of llGetTimestamp as argument
        // (c) KottosSperber 3/10/08
        // do not sell
        list dlist = llParseString2List(timestamp ,["-","T",":","."],[]);
        integer jahr    =  llList2Integer(dlist,0);
        integer monat   =  llList2Integer(dlist,1);
        integer tag     =  llList2Integer(dlist,2);
        integer h         =  llList2Integer(dlist,3);
        integer sj = (integer) (jahr%4 == 0);
        integer B = 22 + (204  - jahr - (jahr%19)*11)%30;
        integer C = (jahr + llFloor(jahr/4.0) + B)%7;
        integer D = 98 + B - C;
        integer SBS = (((25 + (D+2)%7)  + 59 +  sj) - 1 ) * 24 + 1 ;
        integer SES = (((25 + (D+5)%7)  + 273 + sj) - 1 ) * 24 + 1 ;    
        integer act_sec = ((tag - 1) + 30*(monat-1) + llFloor((monat + llFloor(monat/8.0))/2)-
                (integer)(monat > 2)*(2 - sj))*24 + h;
        integer MEZ = -1;
        if ((act_sec >= SBS)&&(act_sec < SES)) MEZ  = 2;
        if ((act_sec < SBS)||(act_sec >= SES)) MEZ  = 1;
        return MEZ;
}
 
E

Ezian Ecksol

Guest
Re: des ist nicht das richtige problem hannibal

Schöne Sache, Kottos! :)

Zur weltweiten Erkennung:

zaphod Enoch schrieb:
d) bei 36 zeitzonen und den dazugehörigen sommer-/ winterzeitumstellungen ist der aufwand hier alles abzufragen einfach zu aufwendig

Es gibt ja nicht pro Zeitzone eine Regel, sondern pro Land, das Sommerzeit verwendet. Die Regeln sind nicht unbedingt wie die deutsche:

Hannibal Hudson schrieb:
Folgende Regel gilt:
Sommerzeitanfang (in Deutschland): letzter Sonntag im März von 2 Uhr auf 3 Uhr
Sommerzeitende (in Deutschland): letzer Sonntag im Oktober von 3 Uhr auf 2 Uhr.

sondern manchmal auch ganz anders geartet. Es ist also schwer, das zu algorithmisieren, außer für jedes in Frage kommende Land eine eigene Funktion in das Script aufzunehmen. In welchem Land man ist, könnte der Kunde z.B. einfach in die Object Description schreiben)

Ich denke mal, dass man, wenn man sich auf 30 Länder beschränkt, und davon ausgeht, dass das Regelwerk für jeweils einige Länder vom Prinzip her gleich ist, dass man dann noch vielleicht 10-20 Funktionen schreiben muss.

Reine Fleißarbeit :) Das Thema gab's neulich mal in einem Script-Channel, und wir kamen überein, dass der, der so ein Script schreibt, und Open Source zur Verfügung stellt, der große SL [libary:465d9f0c45]Abkürzung für [Second Life][/libary:465d9f0c45] Script-Held ist :)
 

Kottos Sperber

Freund/in des Forums
Re: des ist nicht das richtige problem hannibal

Ezian Ecksol schrieb:
Ich denke mal, dass man, wenn man sich auf 30 Länder beschränkt, und davon ausgeht, dass das Regelwerk für jeweils einige Länder vom Prinzip her gleich ist, dass man dann noch vielleicht 10-20 Funktionen schreiben muss.

Die Regel muss natürlich irgendwie algorithmisierbar sein, z.B. immer an einem festen Tag (z.B. erster März), oder wie in D immer am letzten Sonntag im Monat (März und Oktober), dann ist es wirklich nur eine Fleißarbeit. Wenn es die Regierung jedes Jahr neu festlegt, geht es natürlich nicht.

Aber, im Sinne des Lag ist es wahrscheinlich sinnvoller den offset in eine Notecard oder in die Objektbeschreibung zu legen. Aufwand: 2 mal im Jahr vom 2 auf 1 und umgedreht zu wechseln. Der Script braucht mehr an Rechenzeit übers Jahr. Vielleicht ist es sinnvoll, nur einmal die Stunde die Funktion aufzurufen, wenn man damit leben kann, dass in besagter Nacht die Uhr für maximal eine Stunde falsch geht.
 
Gerade erst gesehen das der Thread wieder aufgegriffen wurde :)

Ich habe mich schlußendlich für meine Armbanduhr auch für die Variante entschieden die Umstellung dem jeweiligen Träger zu überlassen.

Wobei das bei mir so gelöst ist, das ich an der Uhr mehrere "Knöpfe" angebracht habe, über die kann man sich dann z.B. das aktuelle Datum anzeigen lassen, oder halt auch den Zeitzonen Offset einstellen (allerdings nur volle Stunden).

MfG
Hannibal
 
E

Ezian Ecksol

Guest
Ich hab mich bei meiner Uhr auch letztlich entschieden, die einfach 2x im Jahr selbst umzustellen. Den Offset zum GMT hab ich einfach in die Object Description geschrieben, da einfach ändern, ein Reset, und das war's.

Aber schon schade, dass man dafür keine elegante Lösung hinkriegt.
 

Kottos Sperber

Freund/in des Forums
Ezian Ecksol schrieb:
Aber schon schade, dass man dafür keine elegante Lösung hinkriegt.

Warum nicht?
Ich habe mal einen Webservice bemueht. Der gibt u.a. auch den Offset zu GMT heraus.
Ist zwar nichts was man sekündlich oder minütlich aufrufen kann, aber zumindest kommt der korrekte GMT offset von dort zurück. Z.B. hier für Kalifornien.

Code:
default
{
	state_entry()
	{
		string cc = "US-CA";
		llHTTPRequest("http://www.timedial.net/world-time-difference-calculator/converter-from-UTC-to-"
					+cc+".aspx",[HTTP_METHOD,"GET"],"");
	}
	http_response(key request_id, integer status, list metadata, string body)
	{
		if (status != 200) {llSay(0,"Alles Scheisse! Deine Elli");llDie();}
		integer i = llSubStringIndex(body,"new timeDiff(\"(UTC/GMT)\",");
		string newstring = llDeleteSubString(body, 0, i+24);
		integer j = llSubStringIndex(newstring,")");
		string nochnewerstring = llDeleteSubString(newstring, j, llStringLength(newstring));
		list listig = llParseString2List(nochnewerstring,[","],[]);
		llSay(0,"Offset fuer" + llList2String(listig,0) + "zu GMT ist "+llList2String(listig,1));
  	}
}
 
Mmm, d.h. man müßte dem Benutzer nur noch eine Liste mit den Abkürzungen für die einzelnen Staaten geben, und schon hätte man ne Automatik, nicht schlecht!

Für den Codeschnipsel gibts von mir ne Positiv-Bewertung!

MfG
Hannibal
 

Kottos Sperber

Freund/in des Forums
Ein Problem gibts aber doch noch. llHTTPRequest schneidet den body der Webseite auf 2049 bytes herunter. (Welche Webseite hat denn heutzutage nur 2000 Zeichen?) Die gesuchte Info liegt aber weit dahinter.
Ich habe das gestern gar nicht mitbekommen, weil ich den LSL Editor benutze. Der hat diese Beschränkung nicht und es läuft einwandfrei.

Vielleicht gibt es eine Webseite, die sich aufs wesentliche konzentriert. Timezonen server gibts glücklicherweise wie Sand am Meer. Die meisten benutzen leider Java oder Js, so dass man das Muster der HTTP Anfrage nicht erkennt. Ich bin leider nicht Experte genug, da zu "manipulieren".
Den timedial.net hatte ich ausgewählt, weil der so eine einfache HTTP-Anfrage gestattet. Aber mit all der Werbung ist die Webseite dann fast 20k Zeichen lang.
 

Michelle Argus

Aktiver Nutzer
Wenn man alle Zeitzonen berücksichtigen will, dann würd ich über einen http_request die uhr synkronisieren lassen. Z.B per NC kann dann jeder seine Zeitzone ändern und du prüfst über eine Webseite (wirds sicherlich schon geben) was die richtige Zeitverschiebung zu sl sein muss...
 

Aktive User in diesem Thread

Oben Unten