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?
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.
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.
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.
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
CTime obj1(time_tObj);
CString s = obj1.Format( "%a %b %d %H:%M:%S %Y" );
MFC a COleDateTime
qui a un constructeur qui prend time_t
(Ou __time64_t
) Et a un Format
méthode.