2011-04-26 21 views
11

¿Cuál es el algoritmo que, dado un día, mes y año, devuelve un día de la semana?¿Algoritmo de fecha a día de la semana?

+3

En Wikipedia: [Cálculo del día de la semana] (http: // en .wikipedia.org/wiki/Calculating_the_day_of_the_week). – hammar

+1

Puedes buscarlo en Google en unos cinco segundos. Aquí hay otra pregunta sobre SO al respecto: http://stackoverflow.com/questions/3017745/given-date-get-day-of-week-systemtime – darvids0n

+0

@darvid: Es un Q & A específico de Windows, no creo sí cuenta. – Potatoswatter

Respuesta

22

Esto se puede hacer utilizando las funciones std::mktime y std::localtime. Estas funciones no son solo POSIX, sino que están impuestas por el Estándar C++ (C++ 03 §20.5).

#include <ctime> 

std::tm time_in = { 0, 0, 0, // second, minute, hour 
     4, 9, 1984 - 1900 }; // 1-based day, 0-based month, year since 1900 

std::time_t time_temp = std::mktime(& time_in); 

// the return value from localtime is a static global - do not call 
// this function from more than one thread! 
std::tm const *time_out = std::localtime(& time_temp); 

std::cout << "I was born on (Sunday = 0) D.O.W. " << time_out->tm_wday << '\n'; 
+2

+1 upvoted. También votó para reabrir esta pregunta. Tal vez es un duplicado de desbordamiento de pila, no sé. Pero esta es una pregunta real de C++ (se cerró como una pregunta no real), y esta es una buena respuesta. –

+0

Hmm, obtuve un voto negativo. No estoy seguro por qué, pero tenga en cuenta que 'std :: localtime' no es seguro para subprocesos. Ver [esta Q & A] (http://stackoverflow.com/q/7313919/153285). – Potatoswatter

+0

Conozco su respuesta aceptada, pero no la respuesta que realmente me pidió. –

0

Necesita un punto de partida. Hoy está bien. Hard-code it.

Luego, debe representar el número de días en un mes. Esto es 31, 28, 31, 30, 31, 30, .... De modo que puede comenzar a sumar y restar 365% 7 al día de la semana de cada año y (suma de días en la diferencia del mes)% 7 nuevamente. Y así.

La advertencia: Los años bisiestos se producen en todos los años cuarto, pero no todos los número 100, a menos que el año es también un múltiplo de 400.

+0

Puedo ir con eso. La codificación dura es totalmente buena. –

Cuestiones relacionadas