protobuf-netでは、段階的なスケール アプローチを使用します (実際、単純に を使用すると、これらすべてが処理されますDateTime
)。同等の .proto は次のようなものです。
message DateTime {
optional sint64 value = 1; // the offset (in units of the selected scale)
// from 1970/01/01
optional TimeSpanScale scale = 2 [default = DAYS]; // the scale of the
// timespan
enum TimeSpanScale {
DAYS = 0;
HOURS = 1;
MINUTES = 2;
SECONDS = 3;
MILLISECONDS = 4;
MINMAX = 15; // dubious
}
}
つまりDateTime
、丸一日で表すことができる場合は、1970 年以降の日数と、スケールに小さなマーカーを追加するだけです。これは、日付をもう少し効率的に送信できることを意味しますが、他のスケールではそれほどコストがかかりません.
個人的には、私は使用しませんToBinary()
。既知のエポック (UNIX エポックなど) からの既知のスケールのオフセットを明示的に使用します。これにより、プラットフォーム間での移植性が向上します。ただし、(たとえば) ミリ秒のオフセットだけを送信する場合は、通常、可変長スケールよりも固定スケールの方が効率的です。署名付きまたは署名なしが必要かどうかは、エポックより前の日付が必要かどうかによって異なります;-p