123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- // Copyright 2013 Vicente J. Botet Escriba
- // Distributed under the Boost Software License, Version 1.0.
- // See http://www.boost.org/LICENSE_1_0.txt
- // See http://www.boost.org/libs/chrono for documentation.
- #define BOOST_CHRONO_VERSION 2
- //#define BOOST_CHRONO_PROVIDES_DATE_IO_FOR_SYSTEM_CLOCK_TIME_POINT 1
- #include <sstream>
- #include <iostream>
- #include <boost/chrono/chrono_io.hpp>
- #include <boost/chrono/floor.hpp>
- #include <boost/chrono/round.hpp>
- #include <boost/chrono/ceil.hpp>
- #include <boost/detail/lightweight_test.hpp>
- #include <cstdio>
- int main()
- {
- using namespace boost;
- using namespace boost::chrono;
- boost::chrono::system_clock::time_point atnow= boost::chrono::system_clock::now();
- {
- std::stringstream strm;
- std::stringstream strm2;
- // does not change anything: strm<<time_fmt(boost::chrono::timezone::utc);
- // does not change anything: strm2<<time_fmt(boost::chrono::timezone::utc);
- boost::chrono::system_clock::time_point atnow2;
- strm<<atnow<<std::endl;
- time_t t = boost::chrono::system_clock::to_time_t(atnow);
- std::cout << "A:" << std::endl;
- std::puts(ctime(&t));
- std::cout << "A:" << std::endl;
- std::cout << "A:" << strm.str()<< std::endl;
- std::cout << "A:" << atnow.time_since_epoch().count() << std::endl;
- strm>>atnow2;
- strm2<<atnow2<<std::endl;
- std::cout << "B:" << strm2.str()<< std::endl;
- std::cout << "B:" << atnow2.time_since_epoch().count()<< std::endl;
- BOOST_TEST_EQ(atnow.time_since_epoch().count(), atnow2.time_since_epoch().count());
- // 1 sec wrong:
- std::cout << "diff:" << boost::chrono::duration_cast<microseconds>(atnow2 - atnow).count() <<std::endl;
- BOOST_TEST_EQ(boost::chrono::duration_cast<microseconds>(atnow2 - atnow).count(), 0);
- std::stringstream formatted;
- formatted << time_fmt(boost::chrono::timezone::utc, "%Y-%m-%d %H:%M:%S");
- formatted << "actual:"<< atnow <<std::endl;
- formatted << "parsed:"<< atnow2 <<std::endl;
- std::cout << formatted.str();
- std::stringstream formatted1;
- formatted1 << time_fmt(boost::chrono::timezone::utc, "%Y-%m-%d %H:%M:%S");
- formatted1 << atnow ;
- std::stringstream formatted2;
- formatted2 << time_fmt(boost::chrono::timezone::utc, "%Y-%m-%d %H:%M:%S");
- formatted2 << atnow2 ;
- BOOST_TEST_EQ(formatted1.str(), formatted2.str());
- }
- {
- std::cout << "FORMATTED" << std::endl;
- std::stringstream strm;
- std::stringstream strm2;
- boost::chrono::system_clock::time_point atnow2;
- // the final second mark is always parsed as 01
- strm<<time_fmt(boost::chrono::timezone::utc, "%Y-%m-%d %H:%M:%S");
- strm2<<time_fmt(boost::chrono::timezone::utc, "%Y-%m-%d %H:%M:%S");
- strm<<atnow<<std::endl;
- std::cout << "actual:" << strm.str()<< std::endl;
- strm>>atnow2;
- strm2<<atnow2<<std::endl;
- // the final second mark is always parsed as 01
- std::cout << "parsed:" << strm2.str()<< std::endl;
- //BOOST_TEST_EQ(atnow, atnow2); // fails because the pattern doesn't contains nanoseconds
- //BOOST_TEST_EQ(atnow.time_since_epoch().count(), atnow2.time_since_epoch().count()); // fails because the pattern doesn't contains nanoseconds
- BOOST_TEST_EQ(boost::chrono::duration_cast<seconds>(atnow2 - atnow).count(), 0);
- }
- return boost::report_errors();
- }
|