2013-07-05 1 views

Répondre

2

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.

+0

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

+0

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. –

0

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.

+0

Est-il possible de faire cela dans l'application ou ai-je besoin d'interroger cette base de données? – Talon06

+0

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. –

+0

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. –