예제 #1
0
        public DateTimeOffset GetUtcNow()
        {
            var elapsedSeconds = _stopwatch.ElapsedTicks / (double)Stopwatch.Frequency;

            if (elapsedSeconds > _syncSeconds)
            {
                Syncronize();

                // account for any time that has passed since the stopwatch was syncronized
                elapsedSeconds = _stopwatch.ElapsedTicks / (double)Stopwatch.Frequency;
            }

            var elapsedTicks = Convert.ToInt64(elapsedSeconds * TicksInOneSecond);

            return(_baseTime.AddTicks(elapsedTicks));
        }
        // https://github.com/exceptionless/Exceptionless.DateTimeExtensions/blob/master/src/Exceptionless.DateTimeExtensions/DateTimeOffsetExtensions.cs#L230
        public static DateTimeOffset Round(this DateTimeOffset date, TimeSpan roundingInterval)
        {
            var halfIntervalTicks = (roundingInterval.Ticks + 1) >> 1;

            return(date.AddTicks(halfIntervalTicks - ((date.Ticks + halfIntervalTicks) % roundingInterval.Ticks)));
        }
 // https://github.com/exceptionless/Exceptionless.DateTimeExtensions/blob/master/src/Exceptionless.DateTimeExtensions/DateTimeOffsetExtensions.cs#L226
 public static DateTimeOffset Ceiling(this DateTimeOffset date, TimeSpan interval)
 {
     return(date.AddTicks(interval.Ticks - (date.Ticks % interval.Ticks)));
 }
 // https://github.com/exceptionless/Exceptionless.DateTimeExtensions/blob/master/src/Exceptionless.DateTimeExtensions/DateTimeOffsetExtensions.cs#L222
 public static DateTimeOffset Floor(this DateTimeOffset date, TimeSpan interval)
 {
     return(date.AddTicks(-(date.Ticks % interval.Ticks)));
 }