time_t seconds;
time(&seconds);
cout << seconds << endl;
Cela me donne un horodatage. Comment puis-je obtenir cette date Epoch dans une chaîne?
std::string s = seconds;
ne marche pas
Essayez std::stringstream
.
#include <string>
#include <sstream>
std::stringstream ss;
ss << seconds;
std::string ts = ss.str();
Un bon encapsuleur autour de la technique ci-dessus est Boost's lexical_cast
:
#include <boost/lexical_cast.hpp>
#include <string>
std::string ts = boost::lexical_cast<std::string>(seconds);
Et pour des questions comme celle-ci, j'aime bien relier Les formateurs de chaînes de Manor Farm de Herb Sutter.
METTRE À JOUR:
Avec C++ 11, utilisez to_string()
.
Essayez ceci si vous voulez avoir l'heure 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 de références sur strftime (), consultez cppreference.com
La meilleure réponse ici ne fonctionne pas pour moi.
Voir les exemples suivants montrant les réponses stringstream et 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é ici
#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;
}
Résultat: 1485498912/1485498912 Trouvé: ici
La deuxième solution la mieux cotée fonctionne 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;
}
Output: 1485498912/2017-01-27 06:35:12 Trouvé: ici
La méthode C++ consiste à utiliser stringstream.
La méthode C consiste à utiliser snprintf () pour formater le nombre:
char buf[16];
snprintf(buf, 16, "%lu", time(NULL));
Standard C++ ne possède pas de fonction heure/date - vous devez utiliser C localtime et les fonctions associées.
la fonction "ctime ()" convertira une heure en chaîne . Si vous souhaitez contrôler le mode d'impression, utilisez "strftime". Cependant, strftime () prend un argument de "struct tm". Utilisez "localtime ()" pour convertir le nombre entier time_t 32 bits en une struct tm.
Voici mon formateur - commentaires bienvenus. Cela semblait être le meilleur moyen de m'aider à poster des messages pour tous ceux qui recherchent la même chose.
#include <iostream>
#include "Parser.h"
#include <string>
#include <memory>
#include <ctime>
#include <chrono>
#include <iomanip>
#include <thread>
using namespace std;
string to_yyyyMMddHHmmssffffff();
string to_yyyyMMddHHmmssffffff() {
using namespace std::chrono;
high_resolution_clock::time_point pointInTime = high_resolution_clock::now();
std::time_t now_c = std::chrono::system_clock::to_time_t(pointInTime);
microseconds micros = duration_cast<microseconds>(pointInTime.time_since_Epoch());
std::size_t fractional_microseconds = micros.count() % 1'000'000;
std:stringstream microstream;
microstream << "00000" << fractional_microseconds;
string formatted = microstream.str();
int index = formatted.length() - 6;
formatted = formatted.substr(index);
std::stringstream dateStream;
dateStream << std::put_time(std::localtime(&now_c), "%F %T") << "." << formatted;
formatted = dateStream.str();
return formatted;
}
Il existe une multitude de façons de formater l'heure (en fonction du fuseau horaire, de la manière dont vous voulez l'afficher, etc.), de sorte que vous ne pouvez pas convertir implicitement simplement time_t en chaîne.
La méthode C consiste à utiliser ctime ou à utiliser strftime plus/ localtime ou gmtime .
Si vous souhaitez utiliser une méthode plus semblable à C++, vous pouvez explorer la bibliothèque Boost.DateTime .
heure locale n'a pas fonctionné pour moi. J'ai utilisé localtime_s:
struct tm buf;
char dateString[26];
time_t time = time(nullptr);
localtime_s(&buf, &time);
asctime_s(dateString, 26, &buf);