Beiträge von Specht im Thema „Julianisches Datum als Einzeiler“

    Hallo,


    das Thema hatte natürlich ein "nostalgisches Augenzwinkern", bitte den ersten Absatz nochmal lesen.


    Es ging hier auch nicht um eine tolle Programmiertechnik oder eine besondere Entdeckung, nur um eine ungewöhnliche, nostalgische Lösung. Der Commodore 64 ist (eine schöne) Geschichte und auch Visual Basic ist steinalt. Niemand will hier die Einzeiler feiern oder gar nochmal aufleben lassen... ;)


    Wie Thomas ( tliastro) oben schon schrieb, gibt es dazu heute in den modernen Programmiersprachen eine eigene Funktion.


    lg, volker :hot_beverage:

    ...hier als Beispiel noch die Originalzeile (noch ohne Uhrzeit, mit anderen Variablennamen und m<=2)



    Natürlich kann man das auch mit if-Abfragen machen, aber die Logikoperatoren sind ja gerade der Punkt im Einzeiler. :slightly_smiling_face:


    salü+cs, volker :hot_beverage:

    Hallo Thomas,


    Mit m<3 kann man nicht rechnen

    nein, es ist ein logischer Operator bzw. eine Funktion, die je nach Abhängigkeit von m entweder den Wert -1 (true) oder 0 (false) hat.


    Die Ursprünge des Einzeilers liegen im Basic des Commodore 64 aus den 1980er Jahren. Dort hatte true den Wert -1. Heute programmiere ich in Visual Basic 6, auch da ist true = -1.


    Mit solchen Logikfunktionen kann man sich if-Abfragen und damit Veränderungen der Variablen sparen. Man muss halt schauen, welchen Wert "true" in der jeweiligen Sprache hat und das ggf ändern.

    Hallo,


    mit dem Erscheinen der ersten Heimcomputer kam bald der damalige Trend der "Einzeiler" auf. In fast jeder Monatszeitschrift gab es einen "Einzeiler des Monats". Man wollte (oft mit Sonderzeichen als Abkürzung für Computerbefehle) soviel Basic-Programm wie möglich in eine (begrenzte) Zeile packen. In dieser Zeit kam mir die Idee, es mal mit dem julianischen Datum zu versuchen.


    Die Berechnung dieser Tageszählung umfasst einige Fälle, die ich mit Logik-Operatoren umgangen habe. So sind IF-Abfragen nicht mehr nötig, und die Variablen behalten für weitere Berechnungen ihre Werte.


    j = int ( 365.25 * (y + (m<3) ) + int ( 30.6001 * (1 + (m - (m<3) * 12) ) ) + 1720981.5 + d + u/24


    Die Formel basiert auf den Werten für true = -1 und false = 0. Es gibt Programmiersprachen, bei denen true = +1 ist. Dann müssen Plus- und Minuszeichen (rot) getauscht werden.


    Hierin sind d, m, y der Tag, der Monat und das Jahr des betreffenden Zeitpunkts, u die Uhrzeit (UT). Der Einzeiler ist in dieser Form gültig vom 1. 3. 1900 bis zum 28. 2. 2100


    Man erhält so für den 1. 1. 1985 1h MEZ ( = 0h UT) den Wert 2446066.5, für den 1. 4. 2001 13h MEZ (= 12h UT) den Wert 2452001.0


    salü+cs, volker :hot_beverage: