aboutsummaryrefslogtreecommitdiff
path: root/contrib/epee/include/time_helper.h
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/epee/include/time_helper.h')
-rw-r--r--contrib/epee/include/time_helper.h130
1 files changed, 29 insertions, 101 deletions
diff --git a/contrib/epee/include/time_helper.h b/contrib/epee/include/time_helper.h
index 244b35800..b306880d9 100644
--- a/contrib/epee/include/time_helper.h
+++ b/contrib/epee/include/time_helper.h
@@ -28,132 +28,60 @@
#pragma once
-//#include <atltime.h>
-//#include <sqlext.h>
-#include <boost/date_time/posix_time/posix_time.hpp>
-#include <boost/date_time/local_time/local_time.hpp>
-#include "pragma_comp_defs.h"
+#include <chrono>
+#include <cstdio>
+#include <ctime>
+#include <string>
namespace epee
{
namespace misc_utils
{
-
-#ifdef __ATLTIME_H__
-
- inline
- bool get_time_t_from_ole_date(DATE src, time_t& res)
+ inline bool get_gmt_time(time_t t, struct tm &tm)
{
- SYSTEMTIME st = {0};
- if(TRUE != ::VariantTimeToSystemTime(src, &st))
- return false;
- ATL::CTime ss(st);
- res = ss.GetTime();
- return true;
- }
+#ifdef _WIN32
+ return gmtime_s(&tm, &t);
+#else
+ return gmtime_r(&t, &tm);
#endif
- inline
- std::string get_time_str(const time_t& time_)
- {
-
-
- char tmpbuf[200] = {0};
- tm* pt = NULL;
-PRAGMA_WARNING_PUSH
-PRAGMA_WARNING_DISABLE_VS(4996)
- pt = localtime(&time_);
-PRAGMA_WARNING_POP
-
- if(pt)
- strftime( tmpbuf, 199, "%d.%m.%Y %H:%M:%S", pt );
- else
- {
- std::stringstream strs;
- strs << "[wrong_time: " << std::hex << time_ << "]";
- return strs.str();
- }
- return tmpbuf;
}
- inline
- std::string get_time_str_v2(const time_t& time_)
- {
-
- char tmpbuf[200] = {0};
- tm* pt = NULL;
-PRAGMA_WARNING_PUSH
-PRAGMA_WARNING_DISABLE_VS(4996)
- pt = localtime(&time_);
-PRAGMA_WARNING_POP
-
- if(pt)
- strftime( tmpbuf, 199, "%Y_%m_%d %H_%M_%S", pt );
- else
- {
- std::stringstream strs;
- strs << "[wrong_time: " << std::hex << time_ << "]";
- return strs.str();
- }
- return tmpbuf;
- }
-
- inline
- std::string get_time_str_v3(const boost::posix_time::ptime& time_)
- {
- return boost::posix_time::to_simple_string(time_);
- }
-
-
-
inline std::string get_internet_time_str(const time_t& time_)
{
char tmpbuf[200] = {0};
- tm* pt = NULL;
-PRAGMA_WARNING_PUSH
-PRAGMA_WARNING_DISABLE_VS(4996)
- pt = gmtime(&time_);
-PRAGMA_WARNING_POP
- strftime( tmpbuf, 199, "%a, %d %b %Y %H:%M:%S GMT", pt );
+ struct tm pt;
+ get_gmt_time(time_, pt);
+ strftime(tmpbuf, 199, "%a, %d %b %Y %H:%M:%S GMT", &pt);
return tmpbuf;
}
inline std::string get_time_interval_string(const time_t& time_)
{
- std::string res;
time_t tail = time_;
-PRAGMA_WARNING_PUSH
-PRAGMA_WARNING_DISABLE_VS(4244)
- int days = tail/(60*60*24);
+ const int days = static_cast<int>(tail/(60*60*24));
tail = tail%(60*60*24);
- int hours = tail/(60*60);
+ const int hours = static_cast<int>(tail/(60*60));
tail = tail%(60*60);
- int minutes = tail/(60);
+ const int minutes = static_cast<int>(tail/60);
tail = tail%(60);
- int seconds = tail;
-PRAGMA_WARNING_POP
- res = std::string() + "d" + boost::lexical_cast<std::string>(days) + ".h" + boost::lexical_cast<std::string>(hours) + ".m" + boost::lexical_cast<std::string>(minutes) + ".s" + boost::lexical_cast<std::string>(seconds);
- return res;
+ const int seconds = static_cast<int>(tail);
+
+ char tmpbuf[64] = {0};
+ snprintf(tmpbuf, sizeof(tmpbuf) - 1, "d%d.h%d.m%d.s%d", days, hours, minutes, seconds);
+
+ return tmpbuf;
}
-#ifdef __SQLEXT
- inline
- bool odbc_time_to_oledb_taime(const SQL_TIMESTAMP_STRUCT& odbc_timestamp, DATE& oledb_date)
+ inline uint64_t get_ns_count()
{
-
- SYSTEMTIME st = {0};
- st.wYear = odbc_timestamp.year;
- st.wDay = odbc_timestamp.day;
- st.wHour = odbc_timestamp.hour ;
- st.wMilliseconds = (WORD)odbc_timestamp.fraction ;
- st.wMinute = odbc_timestamp.minute ;
- st.wMonth = odbc_timestamp.month ;
- st.wSecond = odbc_timestamp.second ;
-
- if(TRUE != ::SystemTimeToVariantTime(&st, &oledb_date))
- return false;
- return true;
+ typedef std::chrono::duration<uint64_t, std::nano> ns_duration;
+ const ns_duration ns_since_epoch = std::chrono::steady_clock::now().time_since_epoch();
+ return ns_since_epoch.count();
}
-#endif
+ inline uint64_t get_tick_count()
+ {
+ return get_ns_count() / 1000000;
+ }
}
}