Endjin.Assembly.ChangeDetection.Infrastructure.Tracer.FormatTime C# (CSharp) Method

FormatTime() private static method

private static FormatTime ( System.DateTime time ) : string
time System.DateTime
return string
        private static string FormatTime(DateTime time)
        {
            var header = new char[13];
            header[2] = ':';
            header[5] = ':';
            header[8] = '.';
            header[12] = ' ';

            var ticks = time.Ticks;
            var n1 = (int)(ticks >> 32);
            var n2 = (int)ticks;
            if (n2 < 0)
            {
                n1++;
            }

            ticks = ((Math.BigMul(429497, n2) - (int)(Math.BigMul(1161359156, n2) >> 32) - Math.BigMul(1161359156, n1)) >> 32) + Math.BigMul(n1, 429497);
            n1 = (int)(ticks >> 32);
            n2 = (int)ticks;
            if (n2 < 0)
            {
                n1++;
            }
            var q = n1 * 50 + ((50 * (n2 >> 16)) >> 16) - (int)(Math.BigMul(1244382467, n1) >> 32) - 1;
            var r = (int)(ticks - Math.BigMul(q, 86400000));
            if (r > 86400000)
            {
                r -= 86400000;
            }

            var unit = (int)(Math.BigMul(r >> 7, 9773437) >> 32) >> 6;
            n2 = (unit * 13) >> 7;
            n1 = r - 3600000 * unit;
            header[0] = ((char)(n2 + '0'));
            header[1] = ((char)(unit - 10 * n2 + '0'));

            unit = (int)((Math.BigMul(n1 >> 5, 2290650)) >> 32);
            n1 -= 60000 * unit;
            n2 = (unit * 13) >> 7;
            header[3] = ((char)(n2 + '0'));
            header[4] = ((char)(unit - 10 * n2 + '0'));

            unit = ((n1 >> 3) * 67109) >> 23;
            n1 -= 1000 * unit;
            n2 = (unit * 13) >> 7;
            header[6] = ((char)(n2 + '0'));
            header[7] = ((char)(unit - 10 * n2 + '0'));

            n2 = (n1 * 41) >> 12;
            header[9] = ((char)(n2 + '0'));
            n1 -= 100 * n2;

            n2 = (n1 * 205) >> 11;
            header[10] = ((char)(n2 + '0'));
            header[11] = ((char)(n1 - 10 * n2 + '0'));

            return new string(header);
        }
    }