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))); }