le scénario est: Je reçois datetime dans le format "AAAA-MM-JJ HH: MM: SS" avec libexif. Pour minimiser le coût d'économie, je veux convertir le datetime en timestamp unix ou similaire qui ne coûte que 64bit ou 32bit. Y a-t-il un moyen explicite avec c?Comment convertir datetime en timestamp unix en c?
17
A
Répondre
30
5
Convertissez chaque partie de la date/heure en entier pour remplir un struct tm
, puis convertissez-le en time_t
en utilisant mktime.
1
Voici une solution filaire dans c/code pseudo Je viens piraté ensemble. Bonne chance!
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'en est-il de 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
Voici un extrait prêt quand strptime n'est pas 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;
}
youself Adjust une chaîne sscanf à ce que vous avez besoin. Pour ignorer le fuseau horaire et toujours convertir en GMT/UTC Soustraire un timezone
(ou _timezone
) de seconds
(timezone
global est défini dans time.h. DST est déjà ignoré par la mise à zéro tm_isdst
domaine de tm
.
Questions connexes
- 1. Convertir UTC en Unix Timestamp
- 2. Convertir timestamp en alphanum
- 3. Comment convertir en datetime
- 4. Fonction SQL Server pour convertir l'heure Unix en datetime local
- 5. Convertir la date RFC 1123 en timestamp en PHP
- 6. Comment convertir DateTime en Date
- 7. Comment convertir Varchar en Datetime?
- 8. Convertir Datetime.ToFileTime() en objet DateTime
- 9. timestamp unix pour booster :: posix_time :: ptime
- 10. SQL Convertir en GMT DateTime
- 11. Comment convertir un horodatage GMT en horodatage Unix (javascript)
- 12. Convertir l'horodatage en datetime en erlang
- 13. Affichage Datetime en utilisant C#
- 14. comment convertir la chaîne en datetime
- 15. comment convertir un pretime en .net datetime
- 16. Comment décomposer le temps unix en C
- 17. Comment convertir datetime en chaîne en python dans django
- 18. SQL Server convertir la chaîne en datetime
- 19. Convertir DateTime en DateTime qui fonctionne avec SQL Server?
- 20. convertir timestamp mysql à mktime
- 21. DateTime Format en C#
- 22. Automatisation NHibernate: Alter DateTime à Timestamp
- 23. En C#, comment convertir le type de données TimeSpan en DateTime?
- 24. Convertir l'objet C# DateTime en horodatage du fichier de capture libpcap
- 25. Comment convertir RFC822 en un objet python datetime?
- 26. Comment faire pour convertir en DateTime sur HTML.Textbox?
- 27. Conversion de datetime XML en datetime SQL
- 28. Datetime en java et mappage datetime par défaut en hibernation
- 29. Comment convertir une chaîne en ascii en binaire en C#?
- 30. C# Convertir les chaînes à DateTime
Je savais qu'il devait être Quelque chose comme strptime, mais je ne pouvais pas le trouver.J'utilise Microsoft 99% du temps, et ils ne le supportent pas –
+1: Je pensais à strptime, mais je ne pouvais pas me souvenir du nom de la fonction pour cela – Powerlord
En note, si vous utilisez Windows, voir cette question: http://stackoverflow.com/questions/321849/strptime-equivalent-on-windows – Powerlord