Antworten:
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 ints 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, 6da 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, strftimein <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.
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.