days_between_years.cpp 1011 B

12345678910111213141516171819202122232425262728293031
  1. //
  2. // $Id$
  3. //
  4. #include<__vic/date_time.h>
  5. namespace __vic {
  6. //----------------------------------------------------------------------------
  7. inline long ceil_divisible(unsigned n, unsigned divisor)
  8. {
  9. unsigned rem = n % divisor;
  10. return rem == 0 ? n : n + (divisor - rem);
  11. }
  12. //----------------------------------------------------------------------------
  13. inline long leap_years_between(unsigned year1, unsigned year2)
  14. {
  15. return (ceil_divisible(year2, 4) - ceil_divisible(year1, 4)) / 4L -
  16. (ceil_divisible(year2, 100) - ceil_divisible(year1, 100)) / 100L +
  17. (ceil_divisible(year2, 400) - ceil_divisible(year1, 400)) / 400L;
  18. }
  19. //----------------------------------------------------------------------------
  20. long days_between_years(unsigned year1, unsigned year2)
  21. {
  22. return (static_cast<long>(year2) - static_cast<long>(year1)) * 365L +
  23. leap_years_between(year1, year2);
  24. }
  25. //----------------------------------------------------------------------------
  26. } // namespace