Comment convertir une date SQLite au format suivant en une variable C++ Time_T?Conversion du champ de date SQLite en C++ Time_T
YYYY-MM-DD HH:MM:SS
Comment convertir une date SQLite au format suivant en une variable C++ Time_T?Conversion du champ de date SQLite en C++ Time_T
YYYY-MM-DD HH:MM:SS
Vous pouvez lire this question, qui porte sur quelques approches. En particulier, si vous avez accès à Boost, vous pouvez utiliser <boost/date_time/posix_time/posix_time.hpp>
et créer un objet boost::posix_time::ptime
à partir d'une chaîne du format de votre question. (Voir la première réponse à cette question.)
Vous pouvez également utiliser strptime()
.
Exemple:
#include <ctime>
#include <iostream>
std::size_t timestamp_to_seconds(const char* timestamp)
{
std::tm tm_struct;
strptime(timestamp, "%Y-%m-%d %H:%M:%S", &tm_struct);
// You can control daylight savings time if necessary.
tm_struct.tm_isdst = 1;
std::size_t t = std::mktime(&tm_struct);
return t;
}
int main()
{
std::cout << timestamp_to_seconds("2013-07-05 12:34:56") << std::endl;
return 0;
}
L'exécution de cet exemple donne le résultat suivant:
$ ./a.out
1373042096
$ date -d "2013-07-05 12:34:56" +%s
1373042096
Comme vous pouvez le voir, il est d'accord avec l'utilitaire date
. (Je suppose que vous êtes sur une plate-forme avec accès à strptime
.) Vous devez faire attention lorsque vous manipulez l'heure d'été ou les informations de fuseau horaire ... J'ai dû utiliser tm_struct.tm_isdst = 1
pour forcer la reconnaissance de l'heure d'été et obtenir un accord avec date
.
time_t
est un horodatage Unix (secondes depuis 1970-01-01), de sorte que vous devez convertir avec strftime:
SELECT strftime('%s', '2013-07-05 12:34:56');
Le résultat est une chaîne, mais vous pouvez le lire comme une valeur entière.
Est-il possible de faire cela dans l'application ou ai-je besoin d'interroger cette base de données? – Talon06
Cela peut être une bonne idée de stocker les dates dans la base de données dans le format 'time_t' en premier lieu. Si vous voulez vraiment les convertir dans votre programme, consultez la réponse de RyanMck. –
Oui, il était un peu difficile de savoir si la conversion était censée avoir lieu via C++ ou SQLite. Certes, la conversion SQLite est plus facile. –
Y at-il une meilleure fonction de type date-heure pour C++? Je suis très nouveau dans la langue et time_t était la première chose que j'ai trouvée. J'ai essayé d'utiliser la bibliothèque boost, mais en essayant de l'utiliser, j'ai beaucoup d'erreurs de compilation. Je ne sais pas si c'est la bibliothèque ou mon manque de compréhension. – Talon06
Salut Talon06, s'il vous plaît voir mon edit pour un court exemple. J'espère que vous pouvez le modifier en fonction de vos objectifs précis. –