123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- // io_ex1.cpp ----------------------------------------------------------//
- // Copyright 2010 Howard Hinnant
- // Copyright 2010 Vicente J. Botet Escriba
- // Distributed under the Boost Software License, Version 1.0.
- // See http://www.boost.org/LICENSE_1_0.txt
- /*
- This code was adapted by Vicente J. Botet Escriba from Hinnant's html documentation.
- Many thanks to Howard for making his code available under the Boost license.
- */
- #include <boost/chrono/chrono_io.hpp>
- #include <ostream>
- #include <iostream>
- // format duration as [-]d/hh::mm::ss.cc
- template <class CharT, class Traits, class Rep, class Period>
- std::basic_ostream<CharT, Traits>&
- display(std::basic_ostream<CharT, Traits>& os,
- boost::chrono::duration<Rep, Period> d)
- {
- using std::cout;
- using namespace boost;
- using namespace boost::chrono;
- typedef duration<long long, ratio<86400> > days;
- typedef duration<long long, centi> centiseconds;
- // if negative, print negative sign and negate
- if (d < duration<Rep, Period>(0))
- {
- d = -d;
- os << '-';
- }
- // round d to nearest centiseconds, to even on tie
- centiseconds cs = duration_cast<centiseconds>(d);
- if (d - cs > milliseconds(5)
- || (d - cs == milliseconds(5) && cs.count() & 1))
- ++cs;
- // separate seconds from centiseconds
- seconds s = duration_cast<seconds>(cs);
- cs -= s;
- // separate minutes from seconds
- minutes m = duration_cast<minutes>(s);
- s -= m;
- // separate hours from minutes
- hours h = duration_cast<hours>(m);
- m -= h;
- // separate days from hours
- days dy = duration_cast<days>(h);
- h -= dy;
- // print d/hh:mm:ss.cc
- os << dy.count() << '/';
- if (h < hours(10))
- os << '0';
- os << h.count() << ':';
- if (m < minutes(10))
- os << '0';
- os << m.count() << ':';
- if (s < seconds(10))
- os << '0';
- os << s.count() << '.';
- if (cs < centiseconds(10))
- os << '0';
- os << cs.count();
- return os;
- }
- int main()
- {
- using std::cout;
- using namespace boost;
- using namespace boost::chrono;
- #ifdef BOOST_CHRONO_HAS_CLOCK_STEADY
- display(cout, steady_clock::now().time_since_epoch()
- + duration<long, mega>(1)) << '\n';
- #endif
- display(cout, -milliseconds(6)) << '\n';
- display(cout, duration<long, mega>(1)) << '\n';
- display(cout, -duration<long, mega>(1)) << '\n';
- }
- //~ 12/06:03:22.95
- //~ -0/00:00:00.01
- //~ 11/13:46:40.00
- //~ -11/13:46:40.00
|