2010-09-01 11 views
6

Sono in grado di ottenere la data corrente ma l'uscita è come 9/1/2010, ma il mio requisito è di ottenere il giorno corrente come "mercoledì" non sotto forma di valore intero come 1. Il mio codice è qui.Come trovare un giorno corrente nella lingua 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; 

} 

Ti prego, aiutami a trovare il giorno corrente come Domenica, Lunedi ......... Grazie

risposta

9

Sei davvero scrivendo per 16 bit DOS, o semplicemente utilizzando qualche strano esercitazione é piú attuale?

strftime è disponibile in qualsiasi moderna libreria 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

Le intestazioni utilizzati siano non standard. Utilizzare le funzioni dallo standard:

#include <time.h> 

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

Dopo aver chiamato la funzione di cui sopra, è possibile ottenere il giorno della settimana da:

tm->tm_wday 

Dai un'occhiata a questo tutorial/example.

C'è more documentation with examples here.

Come altri hanno sottolineato, è possibile utilizzare strftime per ottenere il nome del giorno della settimana una volta che si dispone di un tm. C'è un buon esempio 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

In alternativa, se ti ostini a usare il compilatore obsoleti, c'è una struct dosdate_t in <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 */ 
}; 

Compilalo con:

void _dos_getdate(struct dosdate_t *date); 
0

strftime è sicuramente la strada giusta da percorrere. Naturalmente si potrebbe fare

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

Sono naturalmente partendo dal presupposto che il valore getdate() mette nella date struct è 0-indicizzato, con la Domenica come il primo giorno della settimana. (Non ho una casella DOS per testare.)

Problemi correlati