如何用c语言查找当天?

时间:2010-09-01 14:05:23

标签: c

我能够获得当前日期但是输出类似于2010年9月1日,但我的要求是像“星期三”那样获取当前日期而不是像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 个答案:

答案 0 :(得分:9)

你真的在为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

答案 1 :(得分:4)

您使用的标头是非标准的。使用标准中的函数:

#include <time.h>

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

在您调用上述功能后,您可以从:

获取工作日
tm->tm_wday

查看此tutorial/example

more documentation with examples here

正如其他人所指出的,您可以使用strftime获取tm后的工作日名称。有一个很好的例子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 :(得分:2)

或者,如果您坚持使用过时的编译器,dosdate_t中有一个<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 */
};

你填写:

void _dos_getdate(struct dosdate_t *date);

答案 3 :(得分:1)

使用struct tm Example

答案 4 :(得分:0)

strftime肯定是正确的方法。你当然可以做到

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

我当然假设getdate()结构中的值date放入0索引,星期日作为一周的第一天。 (我没有要测试的DOS框。)