2010-09-01 5 views
6

Je suis en mesure d'obtenir la date actuelle, mais la sortie est comme 9/1/2010, mais mon exigence est d'obtenir le jour actuel comme "mercredi" pas sous forme de valeur entière comme 1. Mon code est ici.Comment trouver une journée en cours en langage 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; 

} 

S'il vous plaît aidez-moi à trouver le jour d'aujourd'hui dimanche, lundi ......... Merci

Répondre

9

Vous écrivez vraiment pour DOS 16 bits, ou tout simplement en utilisant un certain tutoriel pas à jour bizarre?

strftime est disponible dans une bibliothèque C moderne:

#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

Les en-têtes que vous utilisez ne sont pas standard. Utiliser les fonctions de la norme:

#include <time.h> 

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

Une fois que vous appelez la fonction ci-dessus, vous pouvez obtenir la semaine à partir de:

tm->tm_wday 

Vérifiez cette tutorial/example.

Il y a more documentation with examples here.

Comme d'autres l'ont souligné, vous pouvez utiliser strftime pour obtenir le nom de la semaine une fois que vous avez un tm. Il y a un bon exemple 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

Sinon, si vous insistez sur l'utilisation de votre compilateur pas à jour, il y a une struct dosdate_t dans <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 */ 
}; 

Vous le remplissez avec:

void _dos_getdate(struct dosdate_t *date); 
0

strftime est certainement la bonne façon de procéder. Bien sûr, vous pouvez faire

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

Je suis bien sûr en supposant que la valeur getdate() met dans la struct date est 0 indexées, avec le dimanche comme le premier jour de la semaine. (Je n'ai pas de boîte DOS à tester.)

Questions connexes