blob: 38f658b8c2e4a78b30123859acc4700ca7017ace (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
// 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();
}
|