我需要在日期中添加秒数。 例如,如果我有一个日期,例如2009127000000,我需要将秒添加到此日期。 另一个例子,给20091231235957增加50秒。
这可能在C?
答案 0 :(得分:29)
在POSIX中,time_t
值被指定为秒,但是C标准不能保证这一点,因此在非POSIX系统上可能不是这样。它通常是(事实上,我不确定它不是一个代表秒数的值)。
这是一个添加时间值的示例,它不假设time_t
表示使用标准库设施的秒数,这对于操作时间来说真的不是特别好:
#include <time.h>
#include <stdio.h>
int main()
{
time_t now = time( NULL);
struct tm now_tm = *localtime( &now);
struct tm then_tm = now_tm;
then_tm.tm_sec += 50; // add 50 seconds to the time
mktime( &then_tm); // normalize it
printf( "%s\n", asctime( &now_tm));
printf( "%s\n", asctime( &then_tm));
return 0;
}
将时间字符串解析为适当的struct tm
变量留作练习。 strftime()
函数可用于格式化新函数(POSIX strptime()
函数可以帮助解析)。
答案 1 :(得分:7)
C日期/时间类型time_t实现为自特定日期以来的秒数,因此要为其添加秒数,只需使用常规算术即可。如果这不是您要求的,请让您的问题更清楚。
答案 2 :(得分:7)
使用<time.h>
中的类型和功能。
time_t now = time(0);
time_t now_plus_50_seconds = now + 50;
time_t now_plus_2_hours = now + 7200;
<time.h>
声明处理time_t
和struct tm
类型的函数。这些功能可以做你想做的一切。
答案 3 :(得分:1)
尝试这样的事情:(注意:没有错误检查)
include <time.h>
char* string = ...;
char buf[80];
struct tm;
strptime(string, "%Y%m...", &tm);
tm->tm_isdst = 0;
strftime(buf, sizeof(buf), "%Y%m...", localtime(mktime(&tm) + 50));