Wochentag aus Datum errechnen

Hallo,

weiß jemand wie man den Wochentag von einem Datm berechnet? Ich will es in einem Atmel Microcontroller verwenden. Vielleicht hat ja schon jemand einen Quelltext.

MfG Alex

Reply to
Alex Loipführer
Loading thread data ...

Ist zwar OT, aber es gibt mir Gelegenheit für meine seit zwei Jahren nicht mehr aktualisierte Homepage Werbung zu machen:

formatting link

Da gibts keinen Quelltext, man kann die Methode aber leicht implementieren. Evtl. sollte man die Rechenschritte noch für den Controller anpassen, z.B. geht das durch 28 dividieren und den Rest bestimmen auch ohne die Tabelle mit den Jahreszahlen.

Bis die Tage Georg

Reply to
Georg Seegerer

WICHTIG:

Der Modulo-Operator funktioniert in vielen Programmiersprachen nicht richtig, sondern liefert einfach nur den Restwert. Berechnet wird der Tag nach der Gauß'schen Kalenderformel. Ausführliche Informationen:

formatting link

Gruß, Nico

Reply to
Nicolas Mittelmaier

In

formatting link
Heft 1 Seite 7 "UNIX-Zeit" habe ich Algorithmus verwendet den ich mal in Funkschau fand. Kann Orginal scannen. Es gibt glaube ich in Literatur mehrere Varianten, der war der der mir am einfachsten schien. Speziell für Kalenderberechnungen auf Controller sei Festkomma statt Float wärmstens empfohlen.

MfG JRD

Reply to
Rafael Deliano

Ich staune immer wieder, womit man sich so alles beschäftigen kann. Wie oft brauchst Du diese Fähigkeit?

;o) Sebastian

Reply to
Sebastian Voitzsch

Danke,

werde mal schauen ob ich es hinbekomme.

MfG Alex

Reply to
Alex Loipführer

"Alex Loipführer" wrote in news:blutfv$8gt$04$ snipped-for-privacy@news.t-online.com:

uchar GetDayOfWeek( uint date ) { uint month,year; int century, yr, dw;

month = GetMonth( date ); year = GetYear( date ); if (year

Reply to
Matthias Weingart

Such mal in den Quellen der Unixe. Für FreeBSD kann ich Dir

formatting link

empfehlen, eventuell auch noch eine der anderen Dateien in diesem Verzeichnis (habe ich mir so genau jetzt nicht angesehen).

--
J"org Wunsch					       Unix support engineer
joerg_wunsch@interface-systems.de        http://www.interface-systems.de/~j/
Reply to
Joerg Wunsch

"Alex Loipführer" schrieb:

Aus den Weiten des Netzes und nicht von mir, aber es funktioniert:

int dayofweek(int y, int m, int d) /* 0 = Sonntag */ /* 1

Reply to
=?iso-8859-1?Q?Ren=E9=20K=F6ni

Funktioniert NICHT in den meisten Programmiersprachen! Siehe mein obiges Posting und den entsprechenden Link. Der einfache Modulo-Operator sorgt zum Beispiel beim 1. März 2000 für ein falsches Ergebnis, weil die Formel auch negative Werte als Ergebnis aufweisen kann. Aber nicht nur an dem Tag, sondern bei vielen Tagen konsequenterweise. Wird im Artikel als "Jahr2000"-Problem der Formel bezeichnet, welches aber bei guten Compilern nicht auftritt, da diese die Modulo-Funktion richtig mit a mod b = a - (b . int(a / b)) implementiert haben. Nico

Reply to
Nicolas Mittelmaier

Bitte um Erklaerung, wie die von Rene gepostete Formel negative Werte produzieren sollte (unter der Voraussetzung, dass man nur positive Jahreszahlen einsetzt, was aber keine Einschraenkung ist, da die Formel ohnehin nur fuer fuer den gregorianischen Kalender, also ab 1582, richtige Ergebnisse liefert).

--
Gruesse,
Pascal Le Bail, Wien
Meine Absenderadresse ist derzeit inaktiv. Siehe .
Reply to
Pascal Le Bail

Nützlich ist es natürlich zu nichts, ist auf Parties aber hin und wieder ein guter Gag.

Georg

Reply to
Georg Seegerer

"Georg Seegerer" schrieb:

Warum funktioniert die Methode nicht für 1900 oder 2100?

Christian

Reply to
Christian Gudrian

"Nicolas Mittelmaier" schrieb:

Hm. Ich dachte immer, der Modulo-Operator _soll_ mir den Restwert liefern. Also meinetwegen

9 mod 8 = 1, 10 mod 3 = 1, 20 mod 4 = 0, 18 mod 5 = 3, usw.

also

a mod b = a - b * ganzzahl( a / b ),

wobei ganzzahl(a) den Nachkommaanteil des Argumentes abschneidet.

Das hat es bisher bei mir immer getan, und ich benutze den modulo-Operator nicht wirklich selten und mit verschiedensten Implementierungen unterschiedlichster Programmiersprachen.

Außerdem hängt wohl von der _Implementierung_ der Programmiersprache ab, wie das Ding nun genau funktioniert.

Oder bin ich auf dem völlig flaschen Dampfer?

Christian

Reply to
Christian Gudrian

Probleme gibts ja auch immer nur bei negativen Zahlen, da waren sich Mathematiker und Programierer nicht einig wie's denn definiert sein soll. Da mann den Modulo bei neg. Zahlen selten benutzt ist es auch ziemlich lang nicht aufgefallen.

Georg

Reply to
Georg Seegerer

Weil die Formel davon ausgeht dass alle 4 Jahre ein Schaltjahr ist. Bei ganzen Jahrhundert-Jahren ist das normalerweise nicht der Fall,

2000 ist da eine Ausnahme. Wenn man es über die Jahre 1901 bis 2099 ausdehnen will braucht man eine extra Tabelle mit Jahreszahlen (zum modulo 28-Bilden) für jedes Jahrhundert.
  1. und 21.Jh gingen in einem Stück da in dem Bereich kein Schaltjahr ausfällt.

Georg

Reply to
Georg Seegerer

Diese Formel kann keine negativen Werte produzieren, da das Array static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4} bereits alle möglichen Modulo7-Werte liefert. Diese Formel ist jedoch nicht für wirklich alle (!) Daten anwendbar. Insbesondere das 1. März 2000-Problem wird in dem von mir oben geposteten Artikel beschrieben.

Meine Erklärung mit den negativen Werten bezog sich daher auf die wirklich anzuwendende Formel, wie sie im Artikel beschrieben wird. Dort können negative Werte auftreten, und diese können in vielen Programmiersprachen falsche Modulo-Werte liefern.Wie Georg in seinem Posting vom 8.Okt 09:14 bereits schreibt, waren sich Mathematiker und Programmierer bei der Definition des Modulo-Operators bei negativen Werten nicht einig.

Gruss, Nico

Reply to
Nicolas Mittelmaier

"Georg Seegerer" schrieb:

Mööp. Klar. Hätte ich auch drauf kommen können.

Gruß,

Christian

Reply to
Christian Gudrian

"Georg Seegerer" schrieb:

Ich dachte immer, Mathematiker kümmern sich eher weniger um die Praxis?

Gruß,

Christian

Reply to
Christian Gudrian

Das ist dann wohl ein weiterer Grund warum es eine Weile nicht aufgefallen ist. Jetzt möchte man es wohl nicht mehr ändern weil es dann nur noch mehr Verwirrung gibt, v.a. wenn jemand einen alten Quellcode compilieren will.

Bis die Tage Georg

Reply to
Georg Seegerer

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.