mikrocontroller.net

Forum: Projekte & Code Aus Datum Wochentag Kalenderwoche berechnen Wochentagsberechnung in C Code


Autor: Thorsten S. (whitenoise)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

im Anhang der C Code zur Ermittlung des Wochentages und der 
Kalenderwoche.

Der Algorithmus hält sich an den Gregorianische Kalender der ende des 16 
Jahrhunderts entwickelt wurde:

Schaltjahr alle 4 Jahre
Alle 100 Jahre keins
Alle 400 Jahre eins

Zykluszeit 400 Jahre.

http://de.wikipedia.org/wiki/Wochentagsberechnung

Für das Jahr steht ein 13Bit Wert zur Berechnung des JAhres 0000-7999 
zur verfügung, in der Software die diese Dateien nutzt, könnte man mit 
einem Offset von 2000 Jahren arbeiten.

Kalenderwoche nach DIN 1355 / ISO 8601

http://de.wikipedia.org/wiki/Woche

der erste Tag der K-Woche ist der Montag
der 4.1. eines Jahres liegt immer in der ersten KW
maximal 3 tage der 53igsten KW liegen im Folgejahr

Im Zip ist ein File mit der Lage der Kalenderwoche bezogen auf den 
28Jahr Rythmus. Die Verschiebungen die durch das Fehlende Schaltjahr im 
Jahrtausend entstehen werden mit berücksichtigt (Problemjahr %400 ->101)

Die Werte werden absolut berechnet, d.h die Daten werden aus der 
JAhresinformation errechnet, es wird nicht von Punkt X losgerechnet, und 
auch nicht ein JAhr X berechnet um die Rechnungen zu stützen. Nur 
innerhalb des JAhres werden ein paar Stützpunkte genommen um Code zu 
sparen.

Für die Wochentage gilt:

0=MO .... 6=SO

Viel Spass damit,
Whitenoise

Autor: Thorsten S. (whitenoise)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
..sie sind entstanden beim Bau meines aktuellen Projektes (LED Matrix 
Kalender mit 3 Farben)

Im Anhang ein Bild der Simulation des gesamten Displays auf dem Rechner.

Gruß,
whitenoise

Autor: Jörg H. (idc-dragon)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit Verlaub, das geht viel einfacher, mit dem Zeller-Algorithmus. Die 
Berechnung braucht keine 10 Zeilen Code und keine Tabellen.
Auf die Schnelle ergoogelt:
http://c-buch.sommergut.de/Kapitel10/Verwendung-vo...

Jörg

Autor: Thorsten S. (whitenoise)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jörg,

ja, mit dem Zeller Algorithmus habe ich auch rumprobiert, ich hatte im 
Bereich März April manchmal Probleme mit dem Ergebnis, und da ich diese 
Lösung schon hatte, habe ich sie bevorzugt. Bei dem Zeller Algoritmus 
werden der Januar und der Februar des Jahres als 13 und 14 Monat das 
letzten Jahres gerechnet, wer spass daran hat, kann diesen auch hier 
einsetzen.

Was der Algorithmus nicht mitbringt ist die Berechnung der 
Kalenderwoche, welche hier auch enthalten ist.

Was wolltest du mir mit deinem Link sagen?

Gruß,
Whitenoise

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier noch ein paar Varianten:
/***********************************************************************

 Day of Week:

 The result is an integer in the range 0-6, 
   where 0=Monday and 6=Sunday  (for the Zeller formular)

 Reference:
 - Chr. Zeller;
   Kalender-Formeln, Acta Mathematica, 9 (1887) 131-136

 - The Day of the Week for Gregorian Calendars (A. D. Bradley) ?? 82-87

 - A. Grassl;
   Kalenderrechnung: Wochentage im laufenden Jahr.
   (Calendar calculations: Days of the week in a year.)
   MNU. Der Mathematische und Naturwissenschaftliche Unterricht. 
   (Apr 1997) v. 50(3) p. 150-151.

 - Keith & Craver;
   The ultimate perpetual calendar?, JoRM 22:4 (1990) 280-282
   day of the week as a 44 character expression in C. (illegal use of --)
   The following 45 character C expression by Keith is correct.
   dow(y,m,d) { return (d+=m<3?y--:y-2,23*m/9+d+4+y/4-y/100+y/400)%7; }

 - M. Oswalden;
   Wochentag und Osterdatum - im Kopf gerechnet.
   T. 1.  Gregorianischer Kalender (ab 15. Okt. 1582)
   T. 2.  Julianischer Kalender.
   Wiss. Nachr. (Jan 1990) (no.82) p. 41-44
   Wiss. Nachr. (Apr 1990) (no.83) p. 40-42.
   ZblD 1992h.00756 + 1992h.00760 

 - A. W. Butkewitsch, M. S. Selikson; 
   Ewige Kalender, Teubner (Leipzig) 1974
   Kleine Naturwissenschaftliche Bibliothek, Bd. 23, p98-113

 - Heinz Bachmann; 
   Kalenderarithmetik, 2nd Ed.,
   Juris Verlag, Z"urich, 1984, ISBN 3-260-05035-0, p26-42
-----------------------------------------------------------------------
   mailto:Torsten.Sillke@uni-bielefeld.de    1999-03-15
***********************************************************************/

#include <stdint.h>
#include <stdio.h>

int dayofweek(uint8_t day, uint8_t month, uint16_t year)
{
   /** Zeller's congruence for the Gregorian calendar. **/
   /** With 0=Monday, ... 5=Saturday, 6=Sunday         **/
   if (month < 3) {
      month += 12;
      year--;
   }
   return ((13*month+3)/5 + day + year + year/4 - year/100 + year/400) % 7;
}


int dayofweek0(int d, int m, int y)
{
   /** a 45 character C expression by Keith    **/
   /** With 0=Sunday, 1=Monday, ... 6=Saturday **/
   return (d+=m<3?y--:y-2,23*m/9+d+4+y/4-y/100+y/400)%7;
}


int dayofweek1(int day, int month, int year)
{
   /** Variation of Sillke for the Gregorian calendar. **/
   /** With 0=Sunday, 1=Monday, ... 6=Saturday         **/
   if ((month -= 2) <= 0) {
      month += 12;
      year--;
   }
   return (83*month/32 + day + year + year/4 - year/100 + year/400) % 7;
}

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DAS amüsiert mich am meisten
"Kalenderwoche nach DIN 1355 / ISO 8601"

es befassen sich wirklich leute damit sowas nach DIN zu formen ..
wo es doch weitaus andere problemchen in der welt gibt :(

ich bin glaube auf dem falschen planeten

sry for OT

Autor: Werner B. (werner-b)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na ja, jedefalls Besser als Bananen und Gurken zu normieren!

Auch Sorry, aber den Frust über unsere EU-Bürokraten muss man ab und zu 
mal loswerden. (Und unsere Volks(ver)treter segnen diesen Hirnsch... ähh 
-malz auch noch ab. Kopfschüttel!)

Autor: P. S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Werner B. schrieb:
> Na ja, jedefalls Besser als Bananen und Gurken zu normieren!
>
> Auch Sorry, aber den Frust über unsere EU-Bürokraten muss man ab und zu
> mal loswerden. (Und unsere Volks(ver)treter segnen diesen Hirnsch... ähh
> -malz auch noch ab. Kopfschüttel!)

Bei den Gurken war es nur leider genau andersrum, Deutschland hatte das 
von der EU gefordert. Es ist leider bei den EU-Mitgliedern ueblich, die 
EU-Vorteile als nationale Erfolge zu verkaufen und nationale Probleme 
als EU-Nachteile zu deklarieren. Wie gut das funktioniert und was dabei 
rauskommt, hat man schoen bei Irland gesehen.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie funktioniert denn der Simulator?

Autor: Thorsten S. (whitenoise)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ist eine windows app, sie lädt an die richtige Stelle im Fenster die 
passenden bmp Bilder (Foto Ausschnitt der originalhardware) in 
abhängigkeit eines Speichers, der ist genauso organisiert wie auf dem 
Atmega in der Originalhardware, so kann ich vieles auf dem Rechner 
entwickeln und ansehen und später nur ins Studio kopieren.

Gruß,
w.

Autor: whitenoise (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
so siehts auf dem display aus.

nur um mal einen vergleich zu zeigen.

gruß,
w.

Autor: Philipp Burch (philipp_burch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
whitenoise schrieb:
> so siehts auf dem display aus.
>
> nur um mal einen vergleich zu zeigen.

Hm, im Simulator spiegelt's aber weniger ;)

Im Ernst: Sieht toll aus! Das hattest du auch in den Kunstwerken 
schonmal gepostet, oder?

Autor: Armin K. (-donald-) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Gerät sieht super aus!
Wie viel Strom zieht denn das? Das ist bestimmt nicht wenig.
Darf man da mal den Schaltplan sehen?

Bei dem Gerät würde ich mir noch vier Tasten wünschen:
Voriger/nächster Monat
Voriges/nächstes Jahr.

Die könnte man neben der Monats- und Jahranzeige anbringen.

Armin

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ White Noise (whitenoise)

Was ist das für ein Display?

Oder ist das einfach ne Matrix aus abermillionen von LEDs ?

Autor: whitenoise (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...ja habe ich dort schonmal gepostet, wollte immer noch einen eigenen 
thread für dies ding aufmachen, aber dafür ist es noch nicht weit genug 
fortgeschritten.

Schaltplan ist noch in arbeit. Das ding soll mit IR Fernbedienung und 
einem joystick lokal am display bedienbar werden. Die Funktion 
(Blättern) gibts schon, das ist das geringste problem.

Das sind Matrixmodule von Samsung (SLM1606M).
Stromaufnahme pro Modul knapp 2A bei voller ausleuchtung (20 sind 
verbaut).

Momentan habe ich aber nur ein 4A Steckernetzteil angeschlossen, bei den 
paar strichen geht es noch gerade so.

Insgesamt sind es etwas mehr als 10000 LEDs.

Gruß,
Whitenoise

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.