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

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

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

4 ответа

Решение

Тип даты / времени 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));
Другие вопросы по тегам