protocol-buffers - 与 Protobuf 一起使用的日期和时间类型

标签 protocol-buffers

我正在考虑使用 Protocol Buffer 在 Linux 和基于 Windows 的系统之间进行数据交换。

发送日期/时间(时间戳)值的推荐格式是什么?序列化时该字段应该很小。

最佳答案

从 protobuf 3.0 开始就有 Timestamp 消息类型,这就是在模型中创建它的方法:

syntax = "proto3";

import "google/protobuf/timestamp.proto";

message MyMessage {
    google.protobuf.Timestamp my_field = 1;
}

timestamp.proto 文件包含 Timestamp 使用的示例,包括与 Linux 和 Windows 程序相关的示例。

Example 1: Compute Timestamp from POSIX time().

Timestamp timestamp;
timestamp.set_seconds(time(NULL));
timestamp.set_nanos(0);

Example 2: Compute Timestamp from POSIX gettimeofday().

struct timeval tv;
gettimeofday(&tv, NULL);

Timestamp timestamp;
timestamp.set_seconds(tv.tv_sec);
timestamp.set_nanos(tv.tv_usec * 1000);

Example 3: Compute Timestamp from Win32 GetSystemTimeAsFileTime().

FILETIME ft;
GetSystemTimeAsFileTime(&ft);
UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;

// A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z
// is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.
Timestamp timestamp;
timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));
timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));

关于protocol-buffers - 与 Protobuf 一起使用的日期和时间类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3574716/

相关文章:

c++ - C 结构 (C++ POD) 和 google protobufs 之间的转换?

protocol-buffers - 自定义协议(protocol)插件解析不适用于自定义选项

serialization - 在磁盘上存储一组 protobuf

android - 为 ARM :./.libs/libprotoc.so 交叉编译 protobuf 时出错:错误:未定义对“描述符”的引用

C++ 在抛出 'std::system_error' 实例后调用终止

python - 为什么在 Python 中导入自动生成的 gRPC 代码时会出错?

visual-studio-code - VS Code PyLint 错误 E0602( undefined variable )与 ProtoBuf 编译的 Python 结构

protocol-buffers - golang grpc protobuf 堆栈是否有投影/过滤器支持?

windows - 构建和使用 Google Protocol Buffers

protocol-buffers - Protocol Buffer 可以解析 "debug string"格式的消息吗?