2010-09-01 16 views
6

Jestem w stanie uzyskać aktualną datę, ale wynik jest podobny do 9/1/2010, ale moim wymaganiem jest uzyskanie bieżącego dnia, np. "Środa", nie w postaci liczby całkowitej, takiej jak 1. Mój kod jest tutaj.Jak znaleźć aktualny dzień w języku 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; 

} 

Proszę mi pomóc znaleźć aktualny dzień jak niedziela, poniedziałek ......... Dzięki

Odpowiedz

9

Czy naprawdę pisanie dla 16-bitowego systemu DOS, lub po prostu za pomocą niektórych dziwne przestarzały poradnik?

strftime jest dostępny w każdej nowoczesnej biblioteki 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

Nagłówki używasz są niestandardowe. Stosować funkcje od standardowego:

#include <time.h> 

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

Po wywołaniu funkcji powyżej, można uzyskać w dni powszednie od:

tm->tm_wday 

Sprawdź tę tutorial/example.

Istnieje more documentation with examples here.

Jak inni podkreślili, można użyć nazwy strftime, aby uzyskać nazwę dnia tygodnia po uzyskaniu tm. Jest to dobry przykład 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

Alternatywnie, jeśli nalegać na korzystanie z nieaktualnych kompilator, tam dosdate_t struct w <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 */ 
}; 

Wypełniasz go:

void _dos_getdate(struct dosdate_t *date); 
0

strftime to z pewnością właściwa droga. Oczywiście można zrobić

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

Jestem oczywiście przy założeniu, że wartość getdate() wykłada na date struct jest 0-indeksowane, w niedzielę jako pierwszy dzień tygodnia. (Nie mam skrzynki DOS do przetestowania.)

Powiązane problemy