Line data Source code
1 : // Copyright (c) 2009-2010 Satoshi Nakamoto
2 : // Copyright (c) 2009-2014 The Bitcoin Core developers
3 : // Distributed under the MIT software license, see the accompanying
4 : // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5 :
6 : #if defined(HAVE_CONFIG_H)
7 : #include "config/bitcoin-config.h"
8 : #endif
9 :
10 : #include "utiltime.h"
11 :
12 : #include <boost/date_time/posix_time/posix_time.hpp>
13 : #include <boost/thread.hpp>
14 :
15 : using namespace std;
16 :
17 : static int64_t nMockTime = 0; //! For unit testing
18 :
19 392366 : int64_t GetTime()
20 : {
21 392366 : if (nMockTime) return nMockTime;
22 :
23 366129 : return time(NULL);
24 : }
25 :
26 911 : void SetMockTime(int64_t nMockTimeIn)
27 : {
28 911 : nMockTime = nMockTimeIn;
29 911 : }
30 :
31 1566 : int64_t GetTimeMillis()
32 : {
33 4698 : return (boost::posix_time::microsec_clock::universal_time() -
34 1566 : boost::posix_time::ptime(boost::gregorian::date(1970,1,1))).total_milliseconds();
35 : }
36 :
37 218006 : int64_t GetTimeMicros()
38 : {
39 654058 : return (boost::posix_time::microsec_clock::universal_time() -
40 218023 : boost::posix_time::ptime(boost::gregorian::date(1970,1,1))).total_microseconds();
41 : }
42 :
43 8744 : void MilliSleep(int64_t n)
44 : {
45 :
46 : /**
47 : * Boost's sleep_for was uninterruptable when backed by nanosleep from 1.50
48 : * until fixed in 1.52. Use the deprecated sleep method for the broken case.
49 : * See: https://svn.boost.org/trac/boost/ticket/7238
50 : */
51 : #if defined(HAVE_WORKING_BOOST_SLEEP_FOR)
52 8744 : boost::this_thread::sleep_for(boost::chrono::milliseconds(n));
53 : #elif defined(HAVE_WORKING_BOOST_SLEEP)
54 : boost::this_thread::sleep(boost::posix_time::milliseconds(n));
55 : #else
56 : //should never get here
57 : #error missing boost sleep implementation
58 : #endif
59 8457 : }
60 :
61 50318 : std::string DateTimeStrFormat(const char* pszFormat, int64_t nTime)
62 : {
63 : // std::locale takes ownership of the pointer
64 150954 : std::locale loc(std::locale::classic(), new boost::posix_time::time_facet(pszFormat));
65 100636 : std::stringstream ss;
66 50317 : ss.imbue(loc);
67 50318 : ss << boost::posix_time::from_time_t(nTime);
68 50316 : return ss.str();
69 609 : }
|