Мне нужно добавить секунды к дате. Например, если у меня есть дата, например, 2009127000000, мне нужно добавить секунды к этой дате. Другой пример: добавьте 50 секунд до 20091231235957.
Возможно ли это в C?
Мне нужно добавить секунды к дате. Например, если у меня есть дата, например, 2009127000000, мне нужно добавить секунды к этой дате. Другой пример: добавьте 50 секунд до 20091231235957.
Возможно ли это в C?
Тип даты/времени C time_t реализуется как количество секунд с определенной даты, поэтому для добавления секунд к нему вы просто используете обычную арифметику. Если это не то, о чем вы просите, сделайте свой вопрос более ясным.
В 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()
может помочь с разбором).
Используйте типы и функции из <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
. Эти функции могут делать все, что вам нужно.
Попробуйте что-то вроде этого: (Примечание: проверка ошибок отсутствует)
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));