2010-09-01 29 views
6

Tôi có thể lấy ngày hiện tại nhưng đầu ra là 9/1/2010, nhưng yêu cầu của tôi là lấy ngày hiện tại như "Thứ Tư" không dưới dạng giá trị số nguyên như 1. Mã của tôi ở đây.Làm thế nào để Tìm một ngày hiện tại bằng ngôn ngữ 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; 

} 

Xin hãy giúp tôi để tìm ngày hiện tại là Chủ nhật, thứ hai ......... Cảm ơn

Trả lời

9

Bạn có thực sự viết cho 16-bit hệ điều hành DOS, hoặc chỉ sử dụng một số hướng dẫn lạc hậu lạ?

strftime có sẵn trong bất kỳ thư viện hiện đại, 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

Các tiêu đề bạn đang sử dụng là không chuẩn. Sử dụng chức năng từ tiêu chuẩn:

#include <time.h> 

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

Sau khi bạn gọi hàm trên, bạn có thể nhận được các ngày trong tuần từ:

tm->tm_wday 

Check-out tutorial/example này.

more documentation with examples here.

Khi những người khác đã chỉ ra, bạn có thể sử dụng strftime để lấy tên ngày trong tuần khi bạn có tm. Có một ví dụ điển hình 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

Ngoài ra, nếu bạn nhấn mạnh vào việc sử dụng trình biên dịch lỗi thời của bạn, có một cấu trúc dosdate_t trong <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 */ 
}; 

Bạn điền vào:

void _dos_getdate(struct dosdate_t *date); 
0

strftime chắc chắn là một cách phù hợp để thực hiện. Tất nhiên bạn có thể làm

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

Tôi dĩ nhiên giả định rằng giá trị getdate() puts trong date struct là 0-lập chỉ mục với Chủ Nhật là ngày đầu tiên trong tuần. (Tôi không có hộp DOS để kiểm tra.)

Các vấn đề liên quan