【问题标题】:How tm structures (from time.h) works?tm 结构(来自 time.h)如何工作?
【发布时间】:2013-05-06 16:13:51
【问题描述】:

我需要创建一个设置日期的结构。我用谷歌搜索了一些东西,我从图书馆time.h 中找到了tm structure,但我遇到了一些麻烦; 我需要在日志文件上打印一些日期,这里是一个例子:

typedef struct tm* tm_;

...

void NEW_Job()
{
    time_t t;
    tm_ secs;
    t=time(NULL);
    secs=localtime(&t);
    add_QUEUEnode(generate_job());
    fprintf(f, "\n%d:%d.%d : New job created.", secs->tm_hour, secs->tm_min, secs->tm_sec);
}

我真的不知道我哪里错了。

提前感谢您的帮助:)

【问题讨论】:

  • 我的一个答案涵盖了使用该结构 stackoverflow.com/questions/16164442/…
  • 您的代码对我来说看起来不错。它做错了什么?
  • typedef struct tm* tm_; -- 在 typedef 后面隐藏指针类型通常是个坏主意。删除 typedef 并声明 struct tm *secs;

标签: c struct time.h


【解决方案1】:

确切的错误不存在,但在代码的另一行,就在这里:

void PCunload(int b)
{
    time_t t;
    tm_ secs;
    int hh, mm, ss;
    hh=(time(NULL)-n[b].start_time)/3600;
    mm=((time(NULL)-n[b].start_time)%3600)/60;
    ss=((time(NULL)-n[b].start_time)%3600)%60;
    t=time(NULL);
    secs=localtime(&t);
    n[b].job.priority=-1;
    -->>fprintf(f, "\n%d:%d.%d : PC number %d unloaded; elapsed time: %d:%d.%d", secs->tm_hour, secs->tm_min, secs->tm_sec, hh, mm, ss);
} 

我尝试在 printf 函数中进行转换,但出现了问题...... 我很抱歉!

【讨论】:

  • 您似乎缺少与"PC number %d" 位匹配的参数...
  • 不要多次致电time(NULL)。只需调用一次并将值存储在t 中,然后使用t。除了效率低下之外,您还可能会在调用 time() 之间存在时钟提前的风险。
【解决方案2】:

strftime() 可以帮助您以您喜欢的格式打印日期和时间。请看一下 man strftime。

【讨论】:

    猜你喜欢
    • 2016-05-25
    • 1970-01-01
    • 1970-01-01
    • 2017-04-11
    • 2015-04-27
    • 1970-01-01
    • 2012-12-07
    • 2017-03-11
    • 2023-01-22
    相关资源
    最近更新 更多