¿Cómo calcular el día de la semana para RTC?

7

Estoy usando el RCP MCP7940 del microchip que se requiere para ingresar el día de la semana como parte de la actualización del RTC con la fecha. Entonces, ¿cómo debo calcular el día de la semana según la fecha proporcionada por el usuario?

    
pregunta Jimit

3 respuestas

8

Si desea calcular el día de la semana, aquí hay una implementación en C de parte de un módulo de Perl que escribí hace aproximadamente 20 años. Me gusta este algoritmo porque no requiere ningún ciclo o una tabla de longitudes de meses. Tenga en cuenta que se supone que int s son 32 bits.

/* 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;
}
    
respondido por el Dave Tweed
0

El día de la semana es Arbitrario . Tú lo definas. Puedes usar el domingo juliano = día 1. Puedes usar el lunes como día 1 porque el domingo es el séptimo día. Podrías usar el viernes como Día 1 porque es el primer día del fin de semana. Puedes usar el martes como Día 1 porque odias los lunes.

    
respondido por el Passerby

Lea otras preguntas en las etiquetas