добавить секунды к дате - PullRequest
       12

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

12 голосов
/ 07 декабря 2009

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

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

Ответы [ 4 ]

30 голосов
/ 07 декабря 2009

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

7 голосов
/ 07 декабря 2009

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

7 голосов
/ 07 декабря 2009

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

1 голос
/ 07 декабря 2009

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

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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...