2010-05-08 6 views
1

J'utilise la fonction time() pour obtenir un horodatage en C++, mais après cela, je dois le convertir en chaîne. Je ne peux pas utiliser ctime, car j'ai besoin de l'horodatage lui-même (dans son format de 10 caractères). Le problème est, je n'ai aucune idée de la forme d'une variable time_t, donc je ne sais pas de quoi je la convertis. cout le gère, donc ça doit être une chaîne de quelque description, mais je n'ai aucune idée de quoi.Obtention d'un horodatage unix en tant que chaîne en C++

Si quelqu'un pouvait m'aider avec ce que ce serait très apprécié, je suis complètement perplexe.

Alternativement, pouvez-vous fournir la sortie de ctime à un champ date-heure MySQL et l'interpréter correctement? J'apprécierais quand même une réponse à la première partie de ma question par souci de compréhension, mais cela résoudrait mon problème.

Répondre

4

time_t est une sorte d'entier. Si cout il gère de la manière que vous voulez, vous pouvez utiliser un std::stringstream pour le convertir en une chaîne:

std::string timestr(time_t t) { 
    std::stringstream strm; 
    strm << t; 
    return strm.str(); 
} 
+0

Supposer que time_t est un nombre entier n'est pas vraiment une bonne idée en ce qui concerne la portabilité: "Les programmes portables ne devraient pas utiliser les valeurs de ce type directement, mais toujours compter sur les appels aux éléments de la bibliothèque standard. http://www.cplusplus.com/reference/ctime/time_t/ – Chris

1

Essayez sprintf(string_variable, "%d", time) ou std::string(itoa(time))?

+0

Cela a permis à l'horodatage de processus à imprimer, mais il revient toujours 134515192. spécifiquement, mon code est: horodatage char [10]; Sprintf (horodatage, "% d", heure); sprintf; puis plus tard query + = timestamp requête étant une chaîne std :: string. – wyatt

2

J'ai eu le même problème. Je l'ai résolu comme suit:

char arcString [32]; 
std::string strTmp; 

// add start-date/start-time 
if (strftime (&(arcString [0]), 20, "%Y-%m-%d_%H-%M-%S", (const tm*) (gmtime ((const time_t*) &(sMeasDocName.sStartTime)))) != 0) 
{ 
    strTmp = (char*) &(arcString [0]); 
} 
else 
{ 
    strTmp = "1970-01-01_00:00:00"; 
} 
Questions connexes