web-dev-qa-db-fra.com

Comment formater la chaîne de date et d'heure en C ++

Disons que j'ai la structure time_t et tm. Je ne peux pas utiliser Boost mais MFC. Comment puis-je en faire une chaîne comme la suite?

Mon Apr 23 17:48:14 2012

Utiliser sprintf est-il le seul moyen?

16
Tae-Sung Shin

La bibliothèque C comprend strftime spécifiquement pour le formatage des dates/heures. Le format que vous demandez semble correspondre à quelque chose comme ceci:

char buffer[256];

strftime(buffer, sizeof(buffer), "%a %b %d %H:%M:%S %Y", &your_tm);

Je crois std::put_time utilise une chaîne de format similaire, bien que cela vous évite d'avoir à traiter explicitement un tampon. Si vous voulez écrire la sortie dans un flux, c'est assez pratique, mais pour le mettre dans une chaîne ce n'est pas beaucoup d'aide - vous devrez faire quelque chose comme:

std::stringstream buffer;

buffer << std::put_time(&your_tm, "%a %b %d %H:%M:%S %Y");

// now the result is in `buffer.str()`.

std::put_time est nouveau avec C++ 11, mais C++ 03 a un time_put facette dans un environnement local qui peut faire la même chose. Si ma mémoire est bonne, j'ai réussi à le faire fonctionner une fois, mais après cela, j'ai décidé que cela ne valait pas la peine, et je ne l'ai pas fait depuis.

33
Jerry Coffin

J'essaierais std::put_time. Voir lien ici pour plus d'informations sur son utilisation. Il prend en charge les chaînes de format complet et autres.

11
Kevin Anderson

ctime() produit des chaînes dans ce format. Il prend un pointeur sur un time_t.
Il y a aussi asctime() qui prend un pointeur vers un struct tm Et fait de même.

2
Alexey Frunze

Si vous devez vous soucier du formatage sur différents paramètres régionaux, n'oubliez pas d'initialiser le CRT avec les paramètres régionaux actuels. Cela affecte également COleDateTime.

setlocale(LC_COLLATE,“.OCP”); // sets the sort order

setlocale(LC_MONETARY, “.OCP”); // sets the currency formatting rules

setlocale(LC_NUMERIC, “.OCP”); // sets the formatting of numerals

setlocale(LC_TIME, “.OCP”); // defines the date/time formatting

Voir mon article de blog qui relie les articles MSDN et d'autres sources. http://gilesey.wordpress.com/2012/12/30/initailizing-mfccrt-for-consumption-of-regional-settings-internationalizationc

2
GilesDMiddleton
CTime obj1(time_tObj);

CString s = obj1.Format( "%a %b %d %H:%M:%S %Y" );
1
Jeeva

MFC a COleDateTime qui a un constructeur qui prend time_t (Ou __time64_t) Et a un Format méthode.

1
Mark Ransom