Zum Inhalt springen

Datumsberechnung


FlakT

Empfohlene Beiträge

Guten Morge zusammen,

brauche mal einige Vorschläge zum Thema Datum:

Möchte gerne wissen, wie der Tag im Jahr, die Kalenderwoche (Woche im Jahr) sowie der Wochentag (Tag in der Woche) berechnet werden könnte.

Gibt da ja tausende Möglichkeiten und irgenwie nichts genaueres oder etwas, was mich anspricht. :rolleyes:

c++

Link zu diesem Kommentar
Auf anderen Seiten teilen

In vielen Hochsprachen gibt es dazu bereits Funktionen, die Dir diese Informationen zurückliefern.

Tag im Jahr: ist ganz einfach. Du addierst einfach alle Tage in der vergangenen vollen Monaten und den des aktuellen Monats.

Dafür musst Du nur den Februar als Schaltjahr berücksichtigen.

Ein Schaltjahr ist auch ganz einfach: Wenn das Jahr ohne Rest durch 4 teilbar ist. UND zusätzlich wenn es durch 100 teilbar ist MUSS es auch durch 400 teilbar sein. Deshalb ist 1900 kein Schaltjahr und 2000 aber schon.

Kalenderwoche: mit dem Tag im Jahr kannst Du auch dessen Kalenderwoche ermitteln. Dabei gilt das KW1 im Jahr immer min 4 Tage des neuen Jahres haben muss, ansonsten wäre das noch KW53 des alten Jahres. Du musst also nur herausfinden, welcher Tag der erste Sonntag ist und dann ermitteln, wieviele Tage bereits dieses Jahr dann schon hatte. Von da ab gehts einfach mittels Integer-Division.

Wochentag: Ist nicht so einfach, aber dafür gibt es zwei Varianten:

a) in Deiner Hochsprache gibt es eine Möglichkeit (Windows z.B. mittels der Struktur TimeStamp). Oder

B) ganz pragmatisch mit einem Dir bekanntem Referenzdatum das selbst abzuzählen. Dafür brauchst Du nur die AnzahlTageImJahr(jahr), welche ganz einfach sind, wenn man die Schaltjahre berücksichtig. Dann kannst Du vom zu errechnenden Tag ganz einfach vor oder zurückrechnen bis zum Referenzdatum und mittels Integer-Division und Modulo rausfinden, welcher Tag das ist ISO-Week-Day ist Mo=1 .. So=7

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Idee mit der <ctime> hatte ich auch schon.Versuche im Moment "Day,Month,Year" wie folgt zu setzen:

void Date::setDMY() {

	struct tm *tmS = localtime(&timeT);

	day = tmS->tm_mday;

	month = tmS->tm_mon + 1;

	year = tmS->tm_year + 1900;

	yday = (tmS->tm_yday + 1);

	wday = tmS->tm_wday;

}

Aber das mit der genauen Berechnung ist schon recht interessant. Werde mal weiter an meinem Algorithmus basteln. Aber der Tag im Jahr scheint schonmal zu funktionieren mittels deiner Beschreibung. Bei den Wochen allerdings kommen gigantisch falsche Zahlen raus. :upps :confused:

Aber schonmal vielen Dank an VaNaTiC für den Ansatz.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...