我使用以下格式字符串和strptime
// Populates input_tm with an input string of Monthname Date, Year
strptime(input_string, "%B %d, %Y", &input_tm);
// Output the day of the week from input_tm
strftime(output_string, TIME_BUFSZ, "%A", &input_tm);
在调用strftime之后,output_string包含"?"
我需要在input_tm中填充哪些其他字段才能使用strftime?
修改
通过查看strftime
所需的结构字段为tm_wday
。
如果我在调用input_tm.tm_wday
之前手动将strftime
设置为某个内容,则会为我提供输出。
所以现在我的问题是,是否有一个标准的C函数可以计算给定日期的工作日?
答案 0 :(得分:2)
这对我有用 - 对mktime()
的调用可以解决您遇到的问题:
#include <stdio.h>
#include <time.h>
enum { TIME_BUFSZ = 256 };
int main(void)
{
char input_string[] = "November 18, 2014";
char output_string[TIME_BUFSZ];
struct tm input_tm = { 0 };
char *end = strptime(input_string, "%B %d, %Y", &input_tm);
if (*end != '\0')
printf("Unused data: [[%s]]\n", end);
printf("tm_year = %d; tm_mon = %d; tm_mday = %d; tm_wday = %d; tm_yday = %d\n",
input_tm.tm_year, input_tm.tm_mon, input_tm.tm_mday,
input_tm.tm_wday, input_tm.tm_yday);
time_t t0 = mktime(&input_tm);
printf("tm_year = %d; tm_mon = %d; tm_mday = %d; tm_wday = %d; tm_yday = %d\n",
input_tm.tm_year, input_tm.tm_mon, input_tm.tm_mday,
input_tm.tm_wday, input_tm.tm_yday);
printf("t0 = %lld\n", (long long)t0);
size_t nbytes = strftime(output_string, TIME_BUFSZ, "%A", &input_tm);
printf("in: [[%s]]\n", input_string);
printf("out (%zu): [[%s]]\n", nbytes, output_string);
return 0;
}
运行示例(Mac OS X 10.9.2 Mavericks上的GCC 4.8.2):
tm_year = 114; tm_mon = 10; tm_mday = 18; tm_wday = 0; tm_yday = 0
tm_year = 114; tm_mon = 10; tm_mday = 18; tm_wday = 2; tm_yday = 321
t0 = 1416297600
in: [[November 18, 2014]]
out (7): [[Tuesday]]
这与cal 11 2014
:
November 2014
Su Mo Tu We Th Fr Sa
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30