es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Formato C++20 sys_time con precisión en milisegundos

Estoy intentando escribir una cadena de tiempo con precisión de milisegundos en MSVC 19.11 con /stc:c++latest.

Con esto obtengo una precisión de 7 dígitos, lo cual no quiero.

auto now = std::chrono::system_clock::now();
std::cout << std::format("{0:%d.%m.%Y %H:%M:%S}", now);

Intenté std::cout << std::format("{0:%d.%m.%Y %H:%M:%S.3}", now); y algunas posibilidades de std::setprecision(3) en vano.

¿Hay alguna solución para formatearlo ahí o necesito cambiar “now”?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para escribir una cadena de tiempo con precisión en milisegundos en MSVC 19.11 utilizando C++ y C++20 con las bibliotecas chrono y fmt, puedes usar el siguiente código:

    #include <chrono>
    #include <iostream>
    #include <fmt core.h="">
    #include <fmt chrono.h="">
    
    int main() {
        auto now = std::chrono::system_clock::now();
        auto now_ms = std::chrono::time_point_cast<std::chrono::milliseconds>(now);
        // extraer los milisegundos del punto de tiempo
        auto value = now_ms.time_since_epoch().count() % 1000;
        // formatear la cadena con precisión en milisegundos
        std::cout << fmt::format("{:%d.%m.%Y %H:%M:%S}.{:03d}\n", fmt::localtime(now), value);
        return 0;
    }
    

    Este código utiliza el método time_point_cast para extraer los milisegundos del punto de tiempo, y luego formatea la cadena utilizando el formato {:%d.%m.%Y %H:%M:%S}.{:03d} para incluir los milisegundos con precisión de tres dígitos. La función fmt::localtime se utiliza para convertir el punto de tiempo en una estructura std::tm que puede ser formateada con la biblioteca fmt.

    Ten en cuenta que este código requiere que la biblioteca fmt esté instalada e incluida en tu proyecto.

Comments are closed.