el escenario es: obtengo el formato de fecha y hora en "YYYY-MM-DD HH: MM: SS" con libexif. Para minimizar el costo de ahorro, quiero convertir la fecha y hora en la marca de tiempo de Unix o similar, que solo cuesta 64 bits o 32 bits. ¿Hay alguna forma explícita con c?cómo convertir datetime a la marca de tiempo unix en c?
17
A
Respuesta
30
5
convertir cada parte de la fecha/hora en un entero para poblar un struct tm
, a continuación, convertir eso en una time_t
usando mktime.
1
Aquí es una solución cableada en código C/seudo acabo hackeado. ¡Buena suerte!
char * runner = NULL;
char *string_orig = "YYYY-MM-DD HH:MM:SS";
time_t time = 0;
struct tm tmp;
use strstr(string_orig, "-") and atoi foreach
tmp->tm_year ..
tmp->tm_mon ..
tmp->tm_mday ..
tmp->tm_hour ..
tmp->tm_min ..
tmp->tm_sec ..
with *runner as help
time = mktime(&tm)
1
¿Qué pasa con sscanf?
struct tm tmVar;
char *strVar = "YYYY-MM-DD HH:MM:SS";
time_t timeVar;
if(sscanf(strVar, "%d-%d-%d %d:%d:%d", &tm.tm_year, /* the other fields */)==6)
timeVar = mktime(&tmVar);
else
// bad format
0
He aquí un fragmento listo cuando strptime no está disponible:
#include <stddef.h>
#include <time.h>
#include <stdio.h>
time_t string_to_seconds(const char *timestamp_str)
{
struct tm tm;
time_t seconds;
int r;
if (timestamp_str == NULL) {
printf("null argument\n");
return (time_t)-1;
}
r = sscanf(timestamp_str, "%d-%d-%d %d:%d:%d", &tm.tm_year, &tm.tm_mon, &tm.tm_mday, &tm.tm_hour, &tm.tm_min, &tm.tm_sec);
if (r != 6) {
printf("expected %d numbers scanned in %s\n", r, timestamp_str);
return (time_t)-1;
}
tm.tm_year -= 1900;
tm.tm_mon -= 1;
tm.tm_isdst = 0;
seconds = mktime(&tm);
if (seconds == (time_t)-1) {
printf("reading time from %s failed\n", timestamp_str);
}
return seconds;
}
Ajuste youself una cadena en sscanf a lo que necesita. Hacer caso omiso de zona horaria y convertir siempre como GMT/UTC restar un timezone
(o _timezone
) de seconds
(timezone
global se define en time.h. el horario de verano ya se ignora poniendo a cero tm_isdst
campo de la tm
.
Cuestiones relacionadas
- 1. Cómo convertir la marca de tiempo de DB2 a datetime?
- 2. UNIX Marca de tiempo para MySQL DATETIME
- 3. Convertir la marca de tiempo de unix a julian
- 4. ¿Cómo puedo convertir una marca de tiempo de Unix a DateTime y viceversa?
- 5. Marca de tiempo de Unix a .net DateTime
- 6. Convertir marca de tiempo Unix a la norma ISO 8601
- 7. MySQL convertir datetime a Unix timestamp
- 8. Cómo convertir una marca de tiempo de Unix en una marca de tiempo ISO8601 en PHP?
- 9. Lote: Marca de tiempo a UNIX Tiempo
- 10. ¿Cómo convertir el tiempo de MySQL a la marca de tiempo UNIX usando PHP?
- 11. Convertir dateTime a unix epoch en xslt
- 12. ¿Cómo convertir la fecha humana a la marca de tiempo de Unix en Mysql?
- 13. Marca de tiempo UNIX siempre en GMT?
- 14. Cambiar datetime a sello de tiempo Unix en Python
- 15. Convertir la marca de tiempo de UNIX en fecha, horas, minutos, segundo objetivo c
- 16. ¿Cómo obtengo una marca de tiempo de Unix a partir de la fecha de PHP?
- 17. Cómo convertir DateTime de JSON a C#?
- 18. Cómo convertir a FECHA marca de tiempo Unix en el script de shell en MacOS
- 19. Ruby: convertir la marca de tiempo de unix a la fecha
- 20. ¿Cómo puedo convertir una marca de tiempo ISO8601 en tiempo Unix en Perl?
- 21. Marca de tiempo Unix en sqlite?
- 22. Convertir la marca de tiempo Unix a formato humano en Django con Python
- 23. cómo generar una marca de hora UTC Unix en C#
- 24. convertir la fecha a la marca de tiempo en javascript?
- 25. MySQL: Convertir INT a DATETIME
- 26. Milisegundos según la marca de tiempo de UNIX
- 27. cómo convertir la cadena de marca de tiempo a java.util.Date
- 28. Convertir marca de tiempo en zonas horarias
- 29. de fecha y hora a la marca de tiempo
- 30. Cómo convertir la marca de tiempo java a php timestamp?
sabía que tenía que haber algo así como strptime, pero no pude encontrarlo. Utilizo Microsoft el 99% del tiempo, y no lo soportan. –
+1: Estaba pensando en strptime, pero no recuerdo el nombre de la función – Powerlord
Como nota al margen, si está utilizando Windows, consulte esta pregunta: http://stackoverflow.com/questions/321849/strptime-equivalent-on- windows – Powerlord