time_t seconds;
time(&seconds);
cout << seconds << endl;
Cela me donne un horodatage. Comment puis-je obtenir cette date d'époque dans une chaîne?Représentation sous forme de chaîne de time_t?
std::string s = seconds;
ne fonctionne pas
time_t seconds;
time(&seconds);
cout << seconds << endl;
Cela me donne un horodatage. Comment puis-je obtenir cette date d'époque dans une chaîne?Représentation sous forme de chaîne de time_t?
std::string s = seconds;
ne fonctionne pas
Essayez std::stringstream
.
#include <string>
#include <sstream>
std::stringstream ss;
ss << seconds;
std::string ts = ss.str();
Une enveloppe agréable autour de la technique ci-dessus est de lexical_cast
Boost:
#include <boost/lexical_cast.hpp>
#include <string>
std::string ts = boost::lexical_cast<std::string>(seconds);
Et pour des questions comme cela, je suis friand de lier The String Formatters of Manor Farm par Herb Sutter.
MISE À JOUR:
Avec 11 C++, utilisez to_string()
.
La norme C++ ne possède aucune fonction d'heure et de date: vous devez utiliser la fonction C localtime et les fonctions associées.
Essayez ceci si vous voulez avoir le temps dans une chaîne lisible:
#include <ctime>
std::time_t now = std::time(NULL);
std::tm * ptm = std::localtime(&now);
char buffer[32];
// Format: Mo, 15.06.2009 20:20:00
std::strftime(buffer, 32, "%a, %d.%m.%Y %H:%M:%S", ptm);
Pour plus référence strftime() consultez cppreference.com
nulldevice, je n'étais pas clair ci-dessus, mais je voulais une représentation sous forme de chaîne de la date de l'époque (timestamp). – g33kz0r
la fonction « ctime() » convertit un temps à une chaîne. Si vous souhaitez contrôler la façon dont il est imprimé, utilisez "strftime". Cependant, strftime() prend un argument de "struct tm". Utilisez "localtime()" pour convertir l'entier time_t 32 bits en un struct tm.
Il existe une myriade de façons de formater l'heure (en fonction du fuseau horaire, comment vous voulez l'afficher, etc.), donc vous ne pouvez pas simplement convertir implicitement un time_t en une chaîne.
La méthode C consiste à utiliser ctime ou à utiliser strftime plus localtime ou gmtime.
Si vous souhaitez effectuer une conversion de type C++, vous pouvez rechercher la bibliothèque Boost.DateTime.
Mis à jour. Merci. –
La méthode C++ consiste à utiliser un flux strings.
Le C est d'utiliser snprintf() pour formater le nombre:
char buf[16];
snprintf(buf, 16, "%lu", time(NULL));
time_t n'est pas nécessairement non signé ou de la même taille qu'un long. En fait, il est généralement signé: http://stackoverflow.com/questions/471248/what-is-ulantly-a-time-t-typedef-to – nitzanms
La réponse ici haut ne fonctionne pas pour moi.
Voir les exemples suivants démontrent à la fois la stringstream et des réponses lexical_cast comme suggéré:
#include <iostream>
#include <sstream>
int main(int argc, char** argv){
const char *time_details = "2017-01-27 06:35:12";
struct tm tm;
strptime(time_details, "%Y-%m-%d %H:%M:%S", &tm);
time_t t = mktime(&tm);
std::stringstream stream;
stream << t;
std::cout << t << "/" << stream.str() << std::endl;
}
Sortie: 1485498912/1485498912 trouvé here
#include <boost/lexical_cast.hpp>
#include <string>
int main(){
const char *time_details = "2017-01-27 06:35:12";
struct tm tm;
strptime(time_details, "%Y-%m-%d %H:%M:%S", &tm);
time_t t = mktime(&tm);
std::string ts = boost::lexical_cast<std::string>(t);
std::cout << t << "/" << ts << std::endl;
return 0;
}
Sortie: 1485498912/1485498912 Trouvé : here
La 2ème solution fonctionne mieux notés localement:
#include <iostream>
#include <string>
#include <ctime>
int main(){
const char *time_details = "2017-01-27 06:35:12";
struct tm tm;
strptime(time_details, "%Y-%m-%d %H:%M:%S", &tm);
time_t t = mktime(&tm);
std::tm * ptm = std::localtime(&t);
char buffer[32];
std::strftime(buffer, 32, "%Y-%m-%d %H:%M:%S", ptm);
std::cout << t << "/" << buffer;
}
Sortie: 1485498912/27/01/2017 06:35:12 Fonder: here
Votre question initiale a demandé comment pour obtenir une date, mais il s'avère que ce que vous vouliez vraiment était le nombre de secondes comme une chaîne. Cela aide à être précis. –