DateTimeExtensions.cs 833 B

1234567891011121314151617181920212223242526272829
  1. using System;
  2. namespace InABox.Core
  3. {
  4. public static class DateTimeExtensions
  5. {
  6. public static DateTime Floor(this DateTime dateTime, TimeSpan interval)
  7. {
  8. return dateTime.AddTicks(-(dateTime.Ticks % interval.Ticks));
  9. }
  10. public static DateTime Ceiling(this DateTime dateTime, TimeSpan interval)
  11. {
  12. var overflow = dateTime.Ticks % interval.Ticks;
  13. return overflow == 0 ? dateTime : dateTime.AddTicks(interval.Ticks - overflow);
  14. }
  15. public static DateTime Round(this DateTime dateTime, TimeSpan interval)
  16. {
  17. var halfIntervalTicks = (interval.Ticks + 1) >> 1;
  18. return dateTime.AddTicks(halfIntervalTicks - (dateTime.Ticks + halfIntervalTicks) % interval.Ticks);
  19. }
  20. }
  21. }