La Web del Programador: Comunidad de Programadores
 
    Pregunta:  19437 - SABER EL DIA DE LA SEMANA DE UNA FECHA USANDO C EN UNIX
Autor:  Guillermo Torres
Hola a todos!!
En un programa que hice en Turbo C++ utilize la siguiente instruccion:

mktime(&aux);

donde aux es una estructura de tipo tm, en aux le doy los vlores de dia, mes y año y con esta funcion me regresa que dia de la semana es (el tm_wday, de la estructura tm), ahora este mismo programa lo tengo que implementar en un servidor AIX, y consultando la ayuda de TC++ encontre que esta funcion no es soportada en UNIX.
Quisiera saber si alguno de ustedes me podria ayudar, el programa que hice es para calcular los dias habiles que han transcurrido desde una fecha dada al dia de hoy, pero la clave es esa funcion para no tomar en cuenta los sabados y domingos.
De antemano muchas gracias por su atencion.

  Respuesta:  José María Carmona
Guillermo:

La estructura tm si es soportada bajo UNIX. Yo acabo de hacer un programita para poder cargar en una variable la fecha de hoy con el fomato "YYYYMMDD". Acá utilizo el resgistro tm del cual hablás vos.

#include
#include
#include

void main()
{
struct tm * fec;
time_t a;
char fecha_char[9];

a=time(NULL);

fec=localtime(&a);

printf("%02d/%02d/%04d\n",fec->tm_mday,(fec->tm_mon +1),(fec->tm_year+1900));

sprintf(fecha_char,"%04d%02d%02d",(fec->tm_year+1900),(fec->tm_mon+1),fec->tm_
mday);

strcpy(fecha_char+8,"");

printf("%s\n",fecha_char);
}

La estructura de tm es la siguiente:
struct tm {
int tm_sec; /* seconds after the minute - [0, 61] */
/* for leap seconds */
int tm_min; /* minutes after the hour - [0, 59] */
int tm_hour; /* hour since midnight - [0, 23] */
int tm_mday; /* day of the month - [1, 31] */
int tm_mon; /* months since January - [0, 11] */
int tm_year; /* years since 1900 */
int tm_wday; /* days since Sunday - [0, 6] */
int tm_yday; /* days since January 1 - [0, 365] */
int tm_isdst; /* flag for alternate daylight */
/* savings time */
};

Espero que esto te sirva.

  Respuesta:  Elena
Hola Guillermo:

No se si esto te funcionara pero prueba con la funcion strftime (char* str, size_t max, const char* format, const struct tm* timeptr)

Esta funcion te devuelve en el char, la fecha en el formato en el que tu le has indicado. Segun tu ejemplo, creo que seria asi:

strftime(fecha,16,"%a",aux) y tendrias en fecha el dia abreviado de la semana

Si quieres el nombre entero del dia de la semana, usa "%A"

Saludos