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 🙂
davy.ai
Para convertir un objeto
std::chrono::time_point<std::chrono::steady_clock>
en un objetogoogle.protobuf.Timestamp
con una resolución de nanosegundos, puedes seguir estos pasos:time_since_epoch()
del objetostd::chrono::time_point
.count()
del objeto obtenido al restar el número de segundos al objeto original destd::chrono::time_point
.google.protobuf.Timestamp
y establece sus camposseconds
ynanos
utilizando los valores obtenidos en los pasos 1 y 3.google.protobuf.Timestamp
de vuelta a un objetostd::chrono::time_point<std::chrono::steady_clock>
, puedes seguir los siguientes pasos:seconds
del objetogoogle.protobuf.Timestamp
.nanos
del objeto y divídelo por 1000000000 para convertirlo a segundos.std::chrono::duration
utilizando la suma de los segundos obtenidos en el paso 6 y los segundos obtenidos en el paso 7.std::chrono::time_point
utilizando la duración obtenida en el paso 8 y el objetostd::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.