8 #include <botan/time.h>
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);
50 std::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);
61 throw Encoding_Error(
"time_t_to_tm could not convert");
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()
calendar_point calendar_value(u64bit a_time_t)
unsigned long long u64bit