Подтвердить что ты не робот

Добавить секунды к дате

Мне нужно добавить секунды к дате. Например, если у меня есть дата, например, 2009127000000, мне нужно добавить секунды к этой дате. Другой пример: добавьте 50 секунд до 20091231235957.

Возможно ли это в C?

4b9b3361

Ответ 1

Тип даты/времени C time_t реализуется как количество секунд с определенной даты, поэтому для добавления секунд к нему вы просто используете обычную арифметику. Если это не то, о чем вы просите, сделайте свой вопрос более ясным.

Ответ 2

В 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() может помочь с разбором).

Ответ 3

Используйте типы и функции из <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. Эти функции могут делать все, что вам нужно.

Ответ 4

Попробуйте что-то вроде этого: (Примечание: проверка ошибок отсутствует)

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));