hola puedo comparar personas con el formato de cumpleaños YYYY-MM-DD con cadena (strcmp). pero necesito comparar la fecha de hoy con el cumpleaños de la persona para mostrar si su cumpleaños es en 7 días o no_ ?. Busqué la biblioteca "time.h" pero no pude manejarla. lo valoro si puedes ayudar.Comparando fechas en C con (Usando la biblioteca time.h)
Respuesta
me gustaría utilizar difftime
sobre los valores time_t
y comparar con el número de segundos en una semana ...
entonces, ¿cómo puedo convertir la cadena por ejemplo "2010-11-10" en una variable time_t para comparar la fecha actual? Y también estoy leyendo la cadena de cumpleaños de la persona desde un archivo – quartaela
Puede cargar los valores en los campos de ' struct tm' y luego usa 'mktime' para obtener un valor' time_t'. Solo asegúrese de que todos los campos que no se usan estén limpios a 0. –
amigo, supongo que este mktime mostrará qué día nació esta persona. pero lo necesito si el cumpleaños de la persona está cerca dentro de los 7 días cuando se ejecuta el programa. – quartaela
rellenar una estructura tm con la fecha de nacimiento y convertir eso a un time_t.
Obtiene el time_t actual usando time().
Una semana es 86400 * 7 segundos.
Compruebe la diferencia entre la fecha de nacimiento time_t y la hora actual_t.
entonces, ¿cómo puedo convertir la cadena por ejemplo "2010-11-10" en una variable time_t para comparar la fecha actual? y también me leen la cadena de cumpleaños de una persona de un archivo. – quartaela
desea que la función strptime
para convertir la cadena en un struct tm
. Es parte de Posix, pero no del estándar C. http://www.cs.potsdam.edu/cgi-bin/man/man2html?3+strptime tiene un ejemplo de cómo usar strptime
.
A continuación, desea agregar 7 al campo tm_mday
, convertir el resultado a un time_t
(con mktime
), y luego compararlo con la hora actual (de time(NULL)
), por lo que ver si la fecha de entrada está dentro de la próxima semana .
No es portable, de acuerdo con el estándar C, hacer aritmética en los valores time_t
, por lo que debe modificar los campos struct tm
en su lugar. Del mismo modo, debe hacer la comparación con la hora actual usando difftime
.
El siguiente programa de ejemplo convierte una cadena dada en la línea del argumento en el número de días. Ejemplo de salida:
% ./nd 2011-06-18 1971-02-10 invalid 2010invalid
38 days
-14699 days
2147483647 days
2147483647 days
Editar: Decidió que -1 no es un indicador de fallo agradable así que usar INX_MAX su lugar.
#include <sys/param.h>
#include <time.h>
#include <string.h>
#include <stdio.h>
#define ONE_DAY (24 * 3600)
int main(int argc, char *argv[])
{
int i;
if(argc < 2)
return (64); // EX_USAGE
for(i=1; i < argc; i++)
{
time_t res;
res = num_days(argv[i]);
printf("%d days\n", res);
}
return(0);
}
int num_days(const char *date)
{
time_t now = time(NULL);
struct tm tmp;
double res;
memset(&tmp, 0, sizeof(struct tm));
if(strptime(date, "%F", &tmp) == NULL)
return INT_MAX;
res = difftime(mktime(&tmp), now);
return (int)(res/ONE_DAY);
}
amigo qué has hecho: D. qué es la biblioteca "#include
sys/param.h contiene parámetros para el sistema.Entre otros, define INT_MAX, que es el valor máximo que puede guardar un tipo entero. También define, por ejemplo, MAXPATHLEN, que es la longitud máxima que puede tener una ruta. Y sí, si el resultado de num_days es> 0 y <= 7, entonces puede decir "¡El usuario cumple años dentro de una semana!" Oh y yo usamos memset, porque strptime solo llena partes de struct tm que están especificadas en la cadena de formato, así que memset se asegura de que las partes indefinidas ahora estén definidas a 0. – Mel
así solo copio y pego el código para probar y da un error que dice "newfile.c: 37: 40: warning: comparación entre puntero y entero" para la línea "if (strptime (date,"% F ", & tmp) == NULL)" _ ?. – quartaela
- 1. Comparando cadenas de fechas usando la biblioteca de tiempo joda
- 2. Comparando dos fechas
- 3. NSDate, comparando dos fechas
- 4. Obteniendo la hora actual en C usando time.h
- 5. Ruby comparando fechas
- 6. Comparando cadenas de fechas en Java
- 7. Uso de fechas con la biblioteca Graphview
- 8. C#: Comparando con nula
- 9. timespec no encontrado en time.h
- 10. reloj() precisión en time.h
- 11. C biblioteca para analizar fechas aproximadas
- 12. Comparando valores dobles en C#
- 13. comparando cadena con la enumeración
- 14. C# Comparando cadenas con casos diferentes
- 15. Comparando C# y Java
- 16. NSNumbers Comparando en Objective C
- 17. C++: Comparando dos vectores
- 18. ¿Por qué iostream incluye time.h?
- 19. Pregunta sobre genéricos en C# comparando con Java
- 20. Cálculo de fechas relativas usando asp.net mvc
- 21. Comparando con valores NULL
- 22. Comparando Ninguno con tipos incorporados usando operadores aritméticos?
- 23. Comparando 2 objetos personalizados - C#
- 24. biblioteca C++ con interfaz c
- 25. ¿Comparando resultados con la fecha de hoy?
- 26. Comparando 0x00000000 con 0xFFFFFFFF en MIPS
- 27. Comparando dos archivos xml usando JAVA
- 28. comparando dos imágenes usando el histograma
- 29. C: Biblioteca Regex con MinGW
- 30. Comparando Common Lisp con Gambit w.r.t su biblioteca de acceso y sistemas de objetos
¿Es esta tarea? –