我能够获得当前日期但是输出类似于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;
}
请帮我找星期日,星期一当天......... 谢谢
答案 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(×tamp);
last = strftime(buffer, 32, "%A", ts);
buffer[last] = '\0';
printf("%s\n", buffer);
return 0;
}
答案 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框。)