Search code examples
timestampprotocol-buffersgrpc

How to set google.protobuf.Timestamp to null?


How to represent a null timestamp in Google ProtoBuf?

I am reading DateTime's from a postgreSQL database--some of which are null--into protobuf TimeStamps.

message test {
  google.protobuf.TimestampValue TransactionTime =1;
}

Unfortunately, there is no such animal as google.protobuf.TimestampValue.

Any help is most appreciated.

TIA


Solution

  • As @JayantSeth pointed out, you should use google.protobuf.Timestamp.

    Since Protobuf forbids to set field to null, you could use a default value to present null in your application. There are two fields in message Timestamp:

    message Timestamp {
      // Represents seconds of UTC time since Unix epoch
      // 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to
      // 9999-12-31T23:59:59Z inclusive.
      int64 seconds = 1;
    
      // Non-negative fractions of a second at nanosecond resolution. Negative
      // second values with fractions must still have non-negative nanos values
      // that count forward in time. Must be from 0 to 999,999,999
      // inclusive.
      int32 nanos = 2;
    }
    

    The default value of type int64 and int32 both are 0. Therefore, if some value read from Postgres is null, then you could set it to 0.

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

    And in your application, you could treat timestamp(0) as null.