Read the byte array representation of a C# date time
March 25, 2015 1 Comment
In this post we saw how to extract the byte array representation of primitive types in C#. Here we’ll look at how to do the same with DateTime objects.
DateTimes are not primitive types so the BitConverter.GetBytes method has no overload for it. Therefore we’ll need to go through some more steps. We’ll convert the date into its 64-bit (long) representation. The long can then be supplied to the GetBytes method:
DateTime utcNow = DateTime.UtcNow; long utcNowAsLong = utcNow.ToBinary(); byte[] utcNowBytes = BitConverter.GetBytes(utcNowAsLong);
utcNowAsLong is a very large integer. It was 5247234542978972986 at time of running the code example. Then we get the bytes using GetBytes which will return a byte of 8 elements as a long is a 64-bit / 8-byte integer.
The reverse operation mirrors what we did above:
long utcNowLongBack = BitConverter.ToInt64(utcNowBytes, 0); DateTime utcNowBack = DateTime.FromBinary(utcNowLongBack);
“utcNowBack” and the original “utcNow” will be set to the same time.
View all various C# language feature related posts here.
Thanks, top small and efficient solution!