コード例 #1
0
        public void TestNewCombGuid()
        {
            var guid      = Guid.NewGuid();
            var timestamp = new DateTime(2013, 4, 2, 0, 0, 0, 500, DateTimeKind.Utc); // half a second past midnight
            var combGuid  = _generator.NewCombGuid(guid, timestamp);

            var expectedDays      = (short)(timestamp.Date - new DateTime(1900, 1, 1, 0, 0, 0, DateTimeKind.Utc)).Days;
            var expectedTimeTicks = 150; // half a second in SQL Server resolution

            var bytes = combGuid.ToByteArray();

            if (BitConverter.IsLittleEndian)
            {
                Array.Reverse(bytes, 10, 2);
                Array.Reverse(bytes, 12, 4);
            }
            var days      = BitConverter.ToInt16(bytes, 10);
            var timeTicks = BitConverter.ToInt32(bytes, 12);

            Assert.IsTrue(guid.ToByteArray().Take(10).SequenceEqual(bytes.Take(10))); // first 10 bytes are from the base Guid
            Assert.AreEqual(expectedDays, days);
            Assert.AreEqual(expectedTimeTicks, timeTicks);
        }