Добавить секунды к дате
Мне нужно добавить секунды к дате. Например, если у меня есть дата, например 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));