Necesito agregar segundos a una fecha. Por ejemplo, si tengo una fecha como 2009127000000, necesito agregar los segundos a esta fecha. Otro ejemplo, agregue 50 segundos a 20091231235957.agregar segundos a una fecha
¿Es esto posible en C?
Necesito agregar segundos a una fecha. Por ejemplo, si tengo una fecha como 2009127000000, necesito agregar los segundos a esta fecha. Otro ejemplo, agregue 50 segundos a 20091231235957.agregar segundos a una fecha
¿Es esto posible en C?
El tipo de fecha/hora C time_t se implementa como el número de segundos desde una fecha determinada, por lo que para agregarle segundos, simplemente use la aritmética normal. Si esto no es lo que preguntas, aclara tu pregunta.
'time_t' es comúnmente segundos, pero no necesariamente. –
Use tipos y funciones de <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>
declara funciones que tienen que ver con time_t
y struct tm
tipos. Estas funciones pueden hacer todo lo que quieras.
debería ser la respuesta. Limpio, claro y tiene excelentes ejemplos. +1 – MyDaftQuestions
Actualizado '
En POSIX, el valor time_t
se especifica en segundos, sin embargo, eso no está garantizado por el estándar C, por lo que podría no ser cierto en sistemas que no sean POSIX. Comúnmente es (de hecho, no estoy seguro de la frecuencia con la que no es un valor que representa los segundos).
He aquí un ejemplo de cómo agregar valores de tiempo que no asume una time_t
representa segundos utilizando las instalaciones de la biblioteca estándar, que en realidad no son especialmente grandes para la manipulación del tiempo:
#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;
}
Analizar la cadena de tiempo en una adecuada struct tm
variable se deja como un ejercicio. La función strftime()
se puede utilizar para formatear una nueva (y la función POSIX strptime()
puede ayudar con el análisis sintáctico).
intentar algo como esto: (Nota: no hay comprobación de errores)
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));
Creo que el formato de fecha en su ejemplo es subespecificada. 2009127000000 podría ser el 7 de diciembre o el 27 de enero. – Thomas
@benjamin, lea las páginas man para ctime (funciones de conversión de fecha/hora) y strptime (convierte la representación de cadena de una estructura time tm) – Glen