9#include <botan/exceptn.h>
12#if defined(BOTAN_TARGET_OS_HAS_WIN32_GET_SYSTEMTIME)
16#if defined(BOTAN_TARGET_OS_HAS_GETTIMEOFDAY)
20#if defined(BOTAN_TARGET_OS_HAS_CLOCK_GETTIME)
22 #ifndef _POSIX_C_SOURCE
23 #define _POSIX_C_SOURCE 199309
28 #ifndef CLOCK_REALTIME
29 #define CLOCK_REALTIME 0
43 static const u64bit NANOSECONDS_UNITS = 1000000000;
45 u64bit res = seconds * NANOSECONDS_UNITS;
46 res += parts * (NANOSECONDS_UNITS / parts_hz);
50std::tm do_gmtime(time_t time_val)
54#if defined(BOTAN_TARGET_OS_HAS_GMTIME_S)
55 gmtime_s(&tm, &time_val);
56#elif defined(BOTAN_TARGET_OS_HAS_GMTIME_R)
57 gmtime_r(&time_val, &tm);
59 std::tm* tm_p = std::gmtime(&time_val);
75 return static_cast<u64bit>(std::time(0));
83 std::tm tm = do_gmtime(
static_cast<std::time_t
>(a_time_t));
95#if defined(BOTAN_TARGET_OS_HAS_CLOCK_GETTIME)
98 ::clock_gettime(CLOCK_REALTIME, &tv);
99 return combine_timers(tv.tv_sec, tv.tv_nsec, 1000000000);
101#elif defined(BOTAN_TARGET_OS_HAS_GETTIMEOFDAY)
104 ::gettimeofday(&tv, 0);
105 return combine_timers(tv.tv_sec, tv.tv_usec, 1000000);
107#elif defined(BOTAN_TARGET_OS_HAS_WIN32_GET_SYSTEMTIME)
111 ::GetSystemTimeAsFileTime(&tv);
112 u64bit tstamp = (
static_cast<u64bit>(tv.dwHighDateTime) << 32) |
115 return (tstamp * 100);
119 return combine_timers(
static_cast<u32bit>(std::time(0)),
120 std::clock(), CLOCKS_PER_SEC);
u64bit get_nanoseconds_clock()
unsigned long long u64bit
calendar_point calendar_value(u64bit a_time_t)
Encoding_Error(const std::string &name)
calendar_point(u32bit y, byte mon, byte d, byte h, byte min, byte sec)