Как найти текущий день на языке c? - PullRequest
6 голосов
/ 01 сентября 2010

Я могу получить текущую дату, но выходные данные похожи на 9/1/2010, но мое требование состоит в том, чтобы получить текущий день, например «Среда», а не в виде целочисленного значения, например 1. Мой код здесь.

#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;

}

Пожалуйста, помогите мне найти текущий день как воскресенье, понедельник ......... Спасибо

Ответы [ 5 ]

9 голосов
/ 01 сентября 2010

Вы действительно пишете для 16-битной DOS или просто используете какой-то странный устаревший учебник?

strftime доступно в любой современной библиотеке 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 голосов
/ 01 сентября 2010

Заголовки, которые вы используете, нестандартны.Используйте функции из стандарта:

#include <time.h>

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

После вызова функции выше, вы можете получить день недели из:

tm->tm_wday

Ознакомьтесь с этим учебным пособием / примером .

Здесь больше документации с примерами .

Как уже отмечали другие, вы можете использовать strftime для получения названия дня недели, когда у вас есть tm,Вот хороший пример здесь :

   #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 голосов
/ 01 сентября 2010

Кроме того, если вы настаиваете на использовании устаревшего компилятора, в <dos.h> есть структура dosdate_t:

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 */
};

Вы заполняете его:

void _dos_getdate(struct dosdate_t *date);
1 голос
/ 01 сентября 2010

Использование struct tm Пример

0 голосов
/ 01 сентября 2010

strftime, безусловно, правильный путь. Конечно, вы могли бы сделать

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

Я, конечно, предполагаю, что значение getdate(), содержащееся в структуре date, индексировано 0, а воскресенье - первый день недели. (У меня нет DOS-бокса для тестирования.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...