long BaseDateTicks = new DateTime(1900, 1, 1).Ticks;
var guidArray = Guid.NewGuid().ToByteArray();
var now = DateTime.UtcNow;
var days = new TimeSpan(now.Ticks - BaseDateTicks);
var msecs = now.TimeOfDay;
var daysArray = BitConverter.GetBytes(days.Days);
var msecsArray = BitConverter.GetBytes((long)(msecs.TotalMilliseconds / 3.333333));
Array.Reverse(daysArray);
Array.Reverse(msecsArray);
Array.Copy(daysArray, daysArray.Length - 2, guidArray, guidArray.Length - 6, 2);
Array.Copy(msecsArray, msecsArray.Length - 4, guidArray, guidArray.Length - 4, 4);
return new Guid(guidArray);
DateTime ExtractDateTime(Guid guid)
var guidArray = guid.ToByteArray();
var daysArray = new byte[4];
var msecsArray = new byte[8];
Array.Copy(guidArray, guidArray.Length - 6, daysArray, daysArray.Length - 2, 2);
Array.Copy(guidArray, guidArray.Length - 4, msecsArray, msecsArray.Length - 4, 4);
Array.Reverse(daysArray);
Array.Reverse(msecsArray);
var days = new TimeSpan(BitConverter.ToInt32(daysArray, 0), 0, 0, 0);
var totalMilliseconds = new TimeSpan(0, 0, 0, 0, (int)(BitConverter.ToInt64(msecsArray, 0) * 3.333333));
return new DateTime(days.Ticks + BaseDateTicks) + totalMilliseconds;
Console.WriteLine(newGuid);
var origDateTime = ExtractDateTime(newGuid);
Console.WriteLine(origDateTime);