Date and time type for use with Protobuf

前端 未结 3 1299
夕颜
夕颜 2020-12-24 10:37

I\'m considering to use Protocol Buffers for data exchange between a Linux and a Windows based system.

Whats the recommended format for sending date/time (timestamp

3条回答
  •  清歌不尽
    2020-12-24 10:52

    There is Timestamp message type since protobuf 3.0, that's how to create it in model:

    syntax = "proto3";
    
    import "google/protobuf/timestamp.proto";
    
    message MyMessage {
        google.protobuf.Timestamp my_field = 1;
    }
    

    timestamp.proto file contains examples of Timestamp using, including related to Linux and Windows programs.

    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));
    

提交回复
热议问题