gpt4 book ai didi

在 C - AIX 机器中计算时间

转载 作者:行者123 更新时间:2023-11-30 14:21:24 28 4
gpt4 key购买 nike

我正在使用struct tm类型的变量编辑时间值(向tm->tm_sec添加一些秒),但在执行后得到错误的结果>mktime(&t).

在 Linux 中这样做可以得到正确的结果,但在 AIX 中却不能。可能是什么问题?

#include <stdio.h>
#include <time.h>
#include <langinfo.h>
#include <locale.h>
int main ()
{
struct tm tm;
struct tm *end;
time_t t;
char str[20] = {'\0'};

//if (strptime("7 Feb 2013 01:47:30", "%d %b %Y %H:%M:%S", &tm) == NULL)
if (strptime("2012-10-17-01-07-30", "%Y-%m-%d-%H-%M-%S", &tm) == NULL)
{printf("Error\n");
}
tm.tm_sec = (tm.tm_sec + 1200);
//tm.tm_sec = 12;
//t = mktime(&tm);
//t = t + 12;
//end =localtime(&t);
strftime(str,20,"%Y %m %d %H %M %S",&tm);
printf("str is %s\n",str);

return 0;
}

最佳答案

我相信正确的答案是使用 time_t,它是一个很大的数字,表示自 1970 年 1 月 1 日午夜以来的时间(以秒为单位)。在这里添加任意秒数变得非常简单。

我预计,如果您只是向 tm->tm_sec 添加秒数,它会溢出,从而导致结果不正确。如果您不走运,则需要将您的更改以秒为单位一直传递到年份(在 2013 年 12 月 31 日 23:59:56 上添加 5 秒将带您到 2014 年 1 月 1 日 00:00:01)。这当然可以做到,但不是:

t =+ 5;

沿着这条线你会走大约十几级

tm.tm_sec += 5;
如果 (tm.tm_sec >= 60) { tm.tm_sec -= 60; tm.tm_min += 1; 如果 (tm.tm_min >= 60) { ... 等等 ... } }

如果您溢出一个月中的天数,事情会变得更加有趣,因为您必须考虑每个月的天数,28、29、30 或 31,具体取决于哪个月 [以及是否是是否闰年]。

关于在 C - AIX 机器中计算时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14771146/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com