2010-09-01 8 views
6

Puedo obtener la fecha actual pero el resultado es como el 9/1/2010, pero mi requisito es obtener el día actual como "Miércoles" no en forma de valor entero como 1. Mi código está aquí.¿Cómo encontrar un día actual en el idioma c?

#include <dos.h> 
#include <stdio.h> 
#include<conio.h> 

int main(void) 
{ 
struct date d; 
getdate(&d); 
printf("The current year is: %d\n", d.da_year); 
printf("The current day is: %d\n", d.da_day); 
printf("The current month is: %d\n", d.da_mon); 
getch(); 
return 0; 

} 

favor me ayude a encontrar el día actual como Domingo, Lunes ......... Gracias

Respuesta

9

¿Está realmente escribiendo para DOS de 16 bits, o simplemente el uso de algún tutorial obsoleta raro?

strftime está disponible en cualquier biblioteca moderna C:

#include <time.h> 
#include <stdio.h> 

int main(void) { 
    char buffer[32]; 
    struct tm *ts; 
    size_t last; 
    time_t timestamp = time(NULL); 

    ts = localtime(&timestamp); 
    last = strftime(buffer, 32, "%A", ts); 
    buffer[last] = '\0'; 

    printf("%s\n", buffer); 
    return 0; 
} 

http://ideone.com/DYSyT

4

Las cabeceras que está utilizando no son estándar. Uso de las funciones de la norma:

#include <time.h> 

struct tm *localtime_r(const time_t *timep, struct tm *result); 

Después de llamar a la función anterior, se puede obtener el día de la semana a partir de:

tm->tm_wday 

Control hacia fuera este tutorial/example.

Hay more documentation with examples here.

Como han señalado otros, puede usar strftime para obtener el nombre del día de la semana una vez que tenga un tm. Hay un buen ejemplo here:

#include <time.h> 
    #include <stdio.h> 
    #include <stdlib.h> 
    int 
    main(int argc, char *argv[]) 
    { 
     char outstr[200]; 
     time_t t; 
     struct tm *tmp; 

     t = time(NULL); 
     tmp = localtime(&t); 
     if (tmp == NULL) { 
      perror("localtime"); 
      exit(EXIT_FAILURE); 
     } 

     if (strftime(outstr, sizeof(outstr), "%A", tmp) == 0) { 
      fprintf(stderr, "strftime returned 0"); 
      exit(EXIT_FAILURE); 
     } 

     printf("Result string is \"%s\"\n", outstr); 
     exit(EXIT_SUCCESS); 
    } 
2

Alternativamente, si usted insiste en usar su compilador obsoleta, hay una estructura dosdate_t en <dos.h>:

struct dosdate_t { 
    unsigned char day;  /* 1-31   */ 
    unsigned char month;  /* 1-12   */ 
    unsigned short year;  /* 1980-2099  */ 
    unsigned char dayofweek; /* 0-6, 0=Sunday */ 
}; 

Usted lo llena con:

void _dos_getdate(struct dosdate_t *date); 
0

strftime es ciertamente el camino correcto a seguir. Por supuesto que podría hacer

char * weekday[] = { "Sunday", "Monday", 
         "Tuesday", "Wednesday", 
         "Thursday", "Friday", "Saturday"}; 
char *day = weekday[d.da_day]; 

Estoy, por supuesto, suponiendo que el valor getdate() pone en el date estructura es indexada 0, con el domingo como el primer día de la semana. (No tengo un cuadro de DOS para probar.)

Cuestiones relacionadas