获取当前日期和时间的秒数

4
    time_t rawtime;
struct tm *mytm;
time_t result;

time(&rawtime);

mytm=localtime(&rawtime);
mytm->tm_mon=month-1;
mytm->tm_mday=day;
mytm->tm_year=year-1900;

mytm->tm_sec=0;
mytm->tm_min=0;
mytm->tm_hour=0;

result = mktime(mytm);

上面的代码片段中,我希望结果显示自1970年1月1日以来给定日期(以DD/MM/YYYY格式存储在day、month、year中)经过的秒数。但是我得到了编译错误。
错误信息为:error: dereferencing pointer to incomplete type。

抱歉,问题不够清晰。如果用户提供了日期,如22/01/2010或01/02/1990或任何日期,我想要得到以秒为单位的结果。在代码中,day、month和year包含用户输入的内容。 - webminal.org
3个回答

3

您需要

#include <time.h>

在你的文件中修复有关不完整类型的错误。

编辑:给定一个日期、月份和年份,查找从1970年1月1日午夜至那一天午夜的秒数。

struct tm mytm = { 0 };
time_t result;
mytm.tm_year = year - 1900;
mytm.tm_mon = month - 1;
mytm.tm_mday = day;
result = mktime(&mytm);
if (result == (time_t) -1) {
    /* handle error */
} else {
    printf("%lld\n", (long long) result);
}

请注意,在ISO C中,mktime()返回一个time_t类型的整数值,表示struct tm *参数中的时间,但是这种整数值的含义不一定是“自1970年1月1日以来的秒数”。它可能根本不是以秒为单位。POSIX要求time()mktime()等返回自1970年1月1日以来的秒数,所以你应该没问题。我提到上述内容是为了完整性。

2

"time"函数返回自1970年1月1日UTC以来的秒数。您无需调用任何其他函数。time_t类型仅是整数类型,可能相当于int。


实际上通常是long类型 - 因此,如果您想以适合任何情况的方式打印它,请将其强制转换为long long类型: printf("%lld", (long long)some_time_t) - caf

1
Dietrich 是正确的,但是如果你想在格式化字符串中添加自纪元以来的秒数和其他日期信息,你应该考虑使用 strftime()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接