mirror of
https://github.com/dogecoin/dogecoin.git
synced 2026-02-01 19:10:55 +00:00
adds a line when no copyright for Dogecoin Core Developers exists but the file has been edited by us, to the last year found in git log, or extends the year range on an existing line when a file has been modified since the year previously listed. Excludes subtrees.
92 lines
2.2 KiB
C++
92 lines
2.2 KiB
C++
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
|
// Copyright (c) 2009-2016 The Bitcoin Core developers
|
|
// Copyright (c) 2022-2023 The Dogecoin Core developers
|
|
// Distributed under the MIT software license, see the accompanying
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#if defined(HAVE_CONFIG_H)
|
|
#include "config/bitcoin-config.h"
|
|
#endif
|
|
|
|
#include "utiltime.h"
|
|
|
|
#include <atomic>
|
|
#include <boost/date_time/posix_time/posix_time.hpp>
|
|
#include <boost/thread.hpp>
|
|
|
|
using namespace std;
|
|
|
|
static std::atomic<int64_t> nMockTime(0); //!< For testing
|
|
|
|
int64_t GetTime()
|
|
{
|
|
int64_t mocktime = GetMockTime();
|
|
if (mocktime) return mocktime;
|
|
|
|
time_t now = time(NULL);
|
|
assert(now > 0);
|
|
return now;
|
|
}
|
|
|
|
int64_t GetMockableTimeMicros()
|
|
{
|
|
int64_t mocktime = GetMockTime();
|
|
if (mocktime) return mocktime * 1000000;
|
|
return GetTimeMicros();
|
|
}
|
|
|
|
void SetMockTime(int64_t nMockTimeIn)
|
|
{
|
|
nMockTime.store(nMockTimeIn, std::memory_order_relaxed);
|
|
}
|
|
|
|
int64_t GetMockTime()
|
|
{
|
|
return nMockTime.load(std::memory_order_relaxed);
|
|
}
|
|
|
|
int64_t GetTimeMillis()
|
|
{
|
|
int64_t now = (boost::posix_time::microsec_clock::universal_time() -
|
|
boost::posix_time::ptime(boost::gregorian::date(1970,1,1))).total_milliseconds();
|
|
assert(now > 0);
|
|
return now;
|
|
}
|
|
|
|
int64_t GetTimeMicros()
|
|
{
|
|
int64_t now = (boost::posix_time::microsec_clock::universal_time() -
|
|
boost::posix_time::ptime(boost::gregorian::date(1970,1,1))).total_microseconds();
|
|
assert(now > 0);
|
|
return now;
|
|
}
|
|
|
|
int64_t GetSystemTimeInSeconds()
|
|
{
|
|
return GetTimeMicros()/1000000;
|
|
}
|
|
|
|
/** Return a time useful for the debug log */
|
|
int64_t GetLogTimeMicros()
|
|
{
|
|
if (nMockTime) return nMockTime*1000000;
|
|
|
|
return GetTimeMicros();
|
|
}
|
|
|
|
void MilliSleep(int64_t n)
|
|
{
|
|
boost::this_thread::sleep_for(boost::chrono::milliseconds(n));
|
|
}
|
|
|
|
std::string DateTimeStrFormat(const char* pszFormat, int64_t nTime)
|
|
{
|
|
static std::locale classic(std::locale::classic());
|
|
// std::locale takes ownership of the pointer
|
|
std::locale loc(classic, new boost::posix_time::time_facet(pszFormat));
|
|
std::stringstream ss;
|
|
ss.imbue(loc);
|
|
ss << boost::posix_time::from_time_t(nTime);
|
|
return ss.str();
|
|
}
|