DateTimeExtensions.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  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 TimeSpan Floor(this TimeSpan timespan, TimeSpan interval)
  11. {
  12. return timespan.Subtract(new TimeSpan(timespan.Ticks % interval.Ticks));
  13. }
  14. public static DateTime Ceiling(this DateTime dateTime, TimeSpan interval)
  15. {
  16. var overflow = dateTime.Ticks % interval.Ticks;
  17. return overflow == 0 ? dateTime : dateTime.AddTicks(interval.Ticks - overflow);
  18. }
  19. public static TimeSpan Ceiling(this TimeSpan timespan, TimeSpan interval)
  20. {
  21. var overflow = timespan.Ticks % interval.Ticks;
  22. return overflow == 0 ? timespan : timespan.Add(new TimeSpan(interval.Ticks - overflow));
  23. }
  24. public static DateTime Round(this DateTime dateTime, TimeSpan interval)
  25. {
  26. var halfIntervalTicks = (interval.Ticks + 1) >> 1;
  27. return dateTime.AddTicks(halfIntervalTicks - (dateTime.Ticks + halfIntervalTicks) % interval.Ticks);
  28. }
  29. public static TimeSpan Round(this TimeSpan timespan, TimeSpan interval)
  30. {
  31. var halfIntervalTicks = (interval.Ticks + 1) >> 1;
  32. return timespan.Add(new TimeSpan(halfIntervalTicks - (timespan.Ticks + halfIntervalTicks) % interval.Ticks));
  33. }
  34. }
  35. }