Digamos que tengo estructura time_t y tm. No puedo usar Boost, pero MFC. ¿Cómo puedo hacer que sea una cadena como la siguiente?Cómo formatear la cadena de fecha y hora en C++
Mon Apr 23 17:48:14 2012
¿Está usando sprintf de la única manera?
Digamos que tengo estructura time_t y tm. No puedo usar Boost, pero MFC. ¿Cómo puedo hacer que sea una cadena como la siguiente?Cómo formatear la cadena de fecha y hora en C++
Mon Apr 23 17:48:14 2012
¿Está usando sprintf de la única manera?
La biblioteca C incluye strftime
específicamente para formatear fechas/horas. El formato que está pidiendo parece corresponder a algo como esto:
char buffer[256];
strftime(buffer, sizeof(buffer), "%a %b %d %H:%M:%S %Y", &your_tm);
creo std::put_time
utiliza una cadena de formato similar, aunque se le exime de tener que tratar explícitamente con una memoria intermedia. Si desea escribir el resultado en una corriente, es muy conveniente, pero conseguirlo en una cadena que no es de mucha ayuda - que tendría que hacer algo como:
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
es una novedad de C++ 11, pero C++ 03 tiene una faceta time_put
en una configuración regional que puede hacer lo mismo. Si la memoria sirve, logré que funcionara una vez, pero después de eso decidí que no valía la pena, y no lo he hecho desde entonces.
Solo quería señalar que gcc aún carece de soporte para put_time:/ –
MFC tiene COleDateTime
que tiene un contructor que toma time_t
(o __time64_t
) y tiene un método Format
.
ctime()
produce cadenas en ese formato. Toma un puntero a time_t
.
También hay asctime()
que toma un puntero a struct tm
y hace lo mismo.
'ctime (& curtime)', donde time_t curtime; referencia: http://www.tutorialspoint.com/c_standard_library/c_function_ctime.htm – parasrish
CTime obj1(time_tObj);
CString s = obj1.Format("%a %b %d %H:%M:%S %Y");
Si tiene que preocuparse por formatear en diferentes lugares, no olvide inicializar el CRT con la configuración regional actual. Esto también afecta a 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
Consulte la publicación de mi blog que relaciona los artículos de MSDN y otras fuentes. http://gilesey.wordpress.com/2012/12/30/initailizing-mfccrt-for-consumption-of-regional-settings-internationalizationc
[Boost.DateTime] (http://www.boost.org/libs/date_time) ha formateado las instalaciones de E/S. – ildjarn
Con una o dos frases más, podría ser una (¿?) Respuesta, @ildjarn – Jasper
@Jasper: mientras uso la biblioteca, encuentro que recomendarla a otras personas es difícil porque la documentación es tan horrible. Acabo de dejar un comentario para que OP pueda buscarlo por sí mismo si así lo desean (por ejemplo, hay muchas respuestas de SO que demuestran exactamente esto, como [este]] (http://stackoverflow.com/a/5697577/636019)) – ildjarn