【问题标题】:Get current date and time in seconds以秒为单位获取当前日期和时间
【发布时间】:2010-01-22 05:10:07
【问题描述】:
    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);

上面的代码 sn-p,我希望结果显示自 1970 年以来,给定日期的 1 月 1 日以来经过的秒数。 DD/MM/YYYY 存储在日、月、年 但是我得到了编译错误

error: dereferencing pointer to incomplete type

【问题讨论】:

  • 对不起,问题不清楚,如果用户给出日、月、年说 22/01/2010 或 01/02/1990 或任何日期,我想在几秒钟内得到结果在代码中,day,month 和 year 包含用户给定的输入

标签: c linux datetime


【解决方案1】:

你需要

#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】:

    “时间”函数返回自 1970 年 1 月 1 日 UTC 以来的秒数。您不需要调用任何其他函数。 time_t 类型只是一个整数类型,它可能相当于 int。

    【讨论】:

    • 它实际上通常是long - 所以如果你想以任何一种方式都可以打印它,请将其转换为long longprintf("%lld", (long long)some_time_t)
    【解决方案3】:

    Dietrich 是正确的,但是如果您希望在带有其他日期信息的格式化字符串中添加自 Epoch 以来的秒数,您应该考虑使用 strftime()

    【讨论】:

      猜你喜欢
      • 2011-04-19
      • 1970-01-01
      • 2023-03-18
      • 2011-09-03
      • 2017-11-29
      • 1970-01-01
      • 2012-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多