DateTime.ToBinary
создает значение, которое объединяет свойства .Ticks
и .Kind
в одно 64-битное значение. Вы не должны использовать его, если не намереваетесь передать это значение обратно в DateTime.FromBinary
в .NET.
Хотя возможно интерпретировать его за пределами .NET, придетсяприменять ту же логику, что и при реализации DateTime.FromBinary
. Вы можете увидеть исходный код здесь .
Вместо этого рассмотрите возможность использования стандартного формата обмена. Наиболее распространенным является ISO 8601 (также частично охвачен RFC 3339 ).
string iso = dateTime.ToString("O");
Выше указано спецификатор "туда-обратно" для получения формата ISO 8601. Есть и другие способы.
Если ваши значения основаны на UTC, вы также можете рассмотреть возможность передачи Unix Timestamp . Самый простой способ получить его из .NET - через DateTimeOffset.ToUnixTimeSeconds
или DateTimeOffset.ToUnixTimeMilliseconds
в зависимости от того, какую точность вы хотите. Конечно, вам нужно сначала преобразовать DateTime
в DateTimeOffset
.
long ms = new DateTimeOffset(dateTime).ToUnixTimeMilliseconds();
Выше предполагается, что ваш DateTime
имеет DateTimeKind.Local
или DateTimeKind.Utc
в .Kind
свойство. Если это DateTimeKind.Unspecified
, то вам, возможно, придется поработать с TimeZoneInfo
, чтобы выровнять по UTC, прежде чем вычислять метку времени Unix.