'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 1:[1]

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.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 ramsay