Ich denke darüber nach, Protokollpuffer für den Datenaustausch zwischen einem Linux- und einem Windows-basierten System zu verwenden.
Was ist das empfohlene Format zum Senden von Datums- / Uhrzeitwerten (Zeitstempel)? Das Feld sollte bei der Serialisierung klein sein.
protocol-buffers
Asgaut
quelle
quelle
Timestamp
Seit protobuf 3.0 gibt es einen Nachrichtentyp. So erstellen Sie ihn im Modell:syntax = "proto3"; import "google/protobuf/timestamp.proto"; message MyMessage { google.protobuf.Timestamp my_field = 1; }
timestamp.proto
Die Datei enthält Beispiele für die Verwendung von Timestamp, einschließlich Linux- und Windows-Programmen.Timestamp timestamp; timestamp.set_seconds(time(NULL)); timestamp.set_nanos(0);
struct timeval tv; gettimeofday(&tv, NULL); Timestamp timestamp; timestamp.set_seconds(tv.tv_sec); timestamp.set_nanos(tv.tv_usec * 1000);
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));
quelle
In der neuesten Protobuf-Version (3.0) - Für C # ist Timestamp ein WellKnownType verfügbar. Überprüfen Sie dies
quelle