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.

Conversión entre google.protobuf.Timestamp y std::chrono::time_point La conversión entre google.protobuf.Timestamp y std::chrono::time_point se realiza de la siguiente manera: – Para convertir de google.protobuf.Timestamp a std::chrono::time_point, se deben seguir estos pasos: 1. Obtener el valor de segundos y nanosegundos del objeto google.protobuf.Timestamp. 2. Crear una variable de tipo std::chrono::time_point utilizando el constructor adecuado. – Para convertir de std::chrono::time_point a google.protobuf.Timestamp, se deben seguir estos pasos: 1. Obtener el valor de la duración desde el punto de tiempo inicial en segundos y nanosegundos. 2. Crear un objeto google.protobuf.Timestamp con los valores obtenidos. Asegúrese de utilizar los tipos de datos adecuados y manejar correctamente las conversiones de unidades de tiempo entre segundos y nanosegundos.

Estoy intentando convertir correctamente un std::chrono::time_point<std::chrono::steady_clock> (C++) a un google.protobuf.Timestamp (protocol buffers) y luego de vuelta a un steady_clock.

Preferiría que se represente con una resolución de nanosegundos, ya que los datos que planeo serializar/deserializar son mediciones con marca de tiempo que se evaluarán en un contexto diferente.

Como no encuentro un estándar definitivo para el tiempo de época de std::chrono::time_point<std::chrono::steady_clock>, me pregunto si alguien más lo ha intentado.

Gracias por cualquier respuesta 🙂

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para convertir un objeto std::chrono::time_point<std::chrono::steady_clock> en un objeto google.protobuf.Timestamp con una resolución de nanosegundos, puedes seguir estos pasos:

    1. Obtén el número de segundos desde la época utilizando la función time_since_epoch() del objeto std::chrono::time_point.
    2. Convierte el número de segundos a nanosegundos multiplicándolo por 1000000000.
    3. Obtén el número de nanosegundos restantes utilizando la función count() del objeto obtenido al restar el número de segundos al objeto original de std::chrono::time_point.
    4. Crea un objeto google.protobuf.Timestamp y establece sus campos seconds y nanos utilizando los valores obtenidos en los pasos 1 y 3.
    5. Para convertir un objeto google.protobuf.Timestamp de vuelta a un objeto std::chrono::time_point<std::chrono::steady_clock>, puedes seguir los siguientes pasos:
    6. Obtén el número de segundos del campo seconds del objeto google.protobuf.Timestamp.
    7. Obtén el número de nanosegundos del campo nanos del objeto y divídelo por 1000000000 para convertirlo a segundos.
    8. Crea un objeto std::chrono::duration utilizando la suma de los segundos obtenidos en el paso 6 y los segundos obtenidos en el paso 7.
    9. Crea un objeto std::chrono::time_point utilizando la duración obtenida en el paso 8 y el objeto std::chrono::steady_clock.

    En cuanto al tiempo de época para std::chrono::time_point<std::chrono::steady_clock>, no hay un estándar definitivo, ya que el tiempo de época está definido por la implementación. Sin embargo, el tiempo de época suele ser el tiempo de inicio del sistema u otro punto fijo en el tiempo elegido por la implementación.

Comments are closed.