Wenn Sie den Wochentag selbst berechnen möchten, finden Sie hier eine C-Implementierung eines Teils eines Perl-Moduls, das ich vor etwa 20 Jahren geschrieben habe. Ich mag diesen Algorithmus, weil er keine Schleife oder eine Tabelle mit Monatslängen erfordert. Beachten Sie, dass int
s als 32 Bit angenommen wird.
/* Returns the number of days to the start of the specified year, taking leap
* years into account, but not the shift from the Julian calendar to the
* Gregorian calendar. Instead, it is as though the Gregorian calendar is
* extrapolated back in time to a hypothetical "year zero".
*/
int leap (int year)
{
return year*365 + (year/4) - (year/100) + (year/400);
}
/* Returns a number representing the number of days since March 1 in the
* hypothetical year 0, not counting the change from the Julian calendar
* to the Gregorian calendar that occured in the 16th century. This
* algorithm is loosely based on a function known as "Zeller's Congruence".
* This number MOD 7 gives the day of week, where 0 = Monday and 6 = Sunday.
*/
int zeller (int year, int month, int day)
{
year += ((month+9)/12) - 1;
month = (month+9) % 12;
return leap (year) + month*30 + ((6*month+5)/10) + day + 1;
}
/* Returns the day of week (1=Monday, 7=Sunday) for a given date.
*/
int dow (int year, int month, int day)
{
return (zeller (year, month, day) % 7) + 1;
}
Gemäß dem Datenblatt unter der Adresse 0x03 in Tabelle 4-1 gibt es ein Feld 'Tag'. Am Ende der Zeile befindet sich eine kurze Beschreibung:
Dies bedeutet, dass der Tag auf eine beliebige Zahl zwischen 1 und 7 eingestellt werden kann. Sie können Ihre eigene Konvention auswählen, welcher Wochentag ist. Auf POSIX-Systemen ist Montag als 1 definiert, ich denke, das ist ein guter Standard. Dann Dienstag = 2; Mittwoch = 3; ...
Tag = 0 ist nicht dokumentiert, verwenden Sie es also nicht.
Unter Linux kann diese Nummer leicht mit dem Befehl gefunden werden
date +%u
, der heute antwortet,6
da es Samstag ist. Wenn Sie diese lokal auf Ihrem PIC berechnen möchten, müssen Sie die C-Bibliothek , dass Geräte die Formel finden müssen, glaube ich,strftime
in<time.h>
genau das tut, aber ich bin nicht genug C - Programmierer zu erklären , wie diese bestimmte Bibliothek zu verwenden. Da es sich um eine häufig verwendete Bibliothek handelt, ist die Dokumentation leicht zu finden.quelle
Wochentag ist beliebig . Sie definieren es. Sie können den Julianischen Sonntag = Tag 1 verwenden. Sie können den Montag als Tag 1 verwenden, da der Sonntag der 7. Tag ist. Sie können Freitag als Tag 1 verwenden, da dies der erste Tag des Wochenendes ist. Sie könnten Dienstag als Tag 1 verwenden, weil Sie Montag hassen.
quelle