Rechnen mit Datum/Zeit

Don Fuchs shared this question 2 years ago
Answered

Hallo!

Ich benutze getTime() um die aktuelle Zeit zu erhalten; diese möchte ich nun in andere Zeitskalen umrechnen, etwa durch Addition von x Sekunden.

Diese Rechnung als Einzeiler zu schreiben ist kaum möglich, insb. bei einem Übertrag von einem Tag und mehr (z. B. 23:59:59 + 1 s), da dann Schaltjahre und die unregelmäßigen Monatslängen berücksichtigt werden müssen.

Gibt es (ganz generell) in Geogebra einen Weg, eine Funktion zu schreiben, die (evtl. mittels lokaler Variablen) iterativ obige Rechnung ausführt und das Ergebnis als Liste zurückgibt?


Vielen Dank!

Comments (4)

photo
1

Pour additionner des secondes, des minutes ou des heures, je commencerais par convertir toutes les durées en secondes avant d'ajouter. Ensuite j'utiliserais la commande Reste (mod, en anglais) avec des diviseurs égaux à 24, 60 et 3600.

exemple : 123 456 secondes = (123 456 - Reste (123 456, 3600))/ 3600 heures + 1056 secondes = 34 heures + 1056 secondes

même méthode pour les minutes et les secondes


pour l'irrégularité du nombre de jours dans un mois, je travaillerais avec la liste des nombres de jours des douze mois

photo
1

Ich nehme an, dass es mehr darum geht welche GGB-Konzepte man verwenden kann.

Zitat: "Gibt es (ganz generell) in Geogebra einen Weg, eine Funktion zu schreiben, die (evtl. mittels lokaler Variablen) iterativ obige Rechnung ausführt und das Ergebnis als Liste zurückgibt?"


Dazu kann man Benutzer-Werkzeug verwenden.

Es hat einige (im Manual beschriebene) Einschränkungen, die aber in dieser Anwendung kaum von Relevanz sind.

Konstanten innerhalb eines Ausdruckes werden als solche behandelt.

Reine Konstanten müssen in einem pseudo-Ausdruck definiert werden

Beispiel:

StartJahr=2000 --> StartJahr=2000 * (JJ/JJ) wobei JJ ein InputParameter ist

---------------------------------------------------------------------------------

Die Berücksichtigung von Schalttagen im Monat Februar in Abhängigkeit vom (Input-) Jahr

könnte ohne Iteration wie folgt erfolgen:

Schieberegler für JJ

Monatstabelle MT:

MT = {0, 31, 28 + Wenn(Mod(JJ, 400) ≟ 0, 1, Wenn(Mod(JJ, 100) ≟ 0, 0, Wenn(Mod(JJ, 4) ≟ 0, 1, 0))), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}

SummeTage im laufenden Jahr (wobei: JJ= aktuelles Jahr, MM = aktueller Monat, TT=Aktueller Tag)

Summe(Erstes(MT, MM - 1)) + TT - 1

Auch die Anzahl Tage der verflossenen Jahre (seit StartDatum) kann sinngemäss wie oben ohne Iteration (schneller) berechnet werden. (anstelle Mod() den Befehl Division() verwenden)

---------------------------------------------

@Rousseau-Wallon

Ich meine man sollte wenn immer möglich in der Sprache des entspechenden Forums antworten.

Der Forumsteilnehmer hat ja eine Wahl getroffen und die sollte berücksichtigt werden.

Allenfalls sehr kanapp in englisch zB "see attachment" oder "you mean this?"

photo
1

Nachtrag:

summe Tage im laufenden Jahr ist nur fast ganz richtig. Also falsch.

Die Berechnung der verflossenen Schaltjahre (JJschalt) ohne Iteration ist in der Beilage ersichtlich.

Ausserdem: die Verwendung des Befehls Division() bringt für diese Berechnung nichts.

Die Berechnung setzt voraus das das Start-Datum in einem Jahr liegt das durch 400 teilbar ist.

(diese Einschränkung liesse sich auch noch regeln)

Der angebrochene Tag wird nicht gezählt. Er wird ja noch mit Stunden, Minuten und Sekunden ergänzt.

Die maximale Anzahl Tage für den Schieberegler TT ist berücksichtigt.

Ich hoffe, dass die Beilage (ohne Stunden, Minuten Sekunden und nicht als Benutzer-Werkzeug) fehlerfrei ist. Falls nicht: bitte Rückmeldung.

.

Randbemerkung:

getestet habe ich gegen eines der vielen Tool im Internet "Anzahl Tage berechnen".

Meine Testfälle könnten unglücklich/unvollständig gewählt sein, meine Berechnung hat Fehler die sich mit dem Tool im Internet decken. Mit andern Worten: Die Fehlerfreiheit lässt sich nur bedingt nachweisen.

.

Erweiterungsmöglichkeiten für das geplante Benutzer-Werkzeug:

Von- Bis-Datum (zB differenz der Anzahl Tag mit gemeinsamer Basis 01.01.1200)

Wochentag, Anzahl Wochen, Jahres-Woche

photo
1

Zunächst danke für alle Antworten, ob Französisch oder Deutsch!


Die Werkzeugfunktion war genau das, wonach ich gesucht habe. Die lästigen Berechnungen bleiben mir dadurch jedoch nicht erspart, aber jetzt kann ich diese immerhin auslagern.


Habe mein Werk angehängt, dieses berechnet aus gegebenem Datum date_0 das Datum date_1, das entsteht durch Addition von Δ Sekunden (auch negative Δ).

© 2021 International GeoGebra Institute