9#include <botan/internal/calendar.h>
11#include <botan/assert.h>
12#include <botan/exceptn.h>
21std::tm do_gmtime(std::time_t time_val) {
24#if defined(BOTAN_TARGET_OS_HAS_WIN32)
25 ::gmtime_s(&tm, &time_val);
26#elif defined(BOTAN_TARGET_OS_HAS_POSIX1)
27 ::gmtime_r(&time_val, &tm);
29 std::tm* tm_p = std::gmtime(&time_val);
31 throw Encoding_Error(
"time_t_to_tm could not convert");
47uint64_t days_since_epoch(uint32_t year, uint32_t month, uint32_t day) {
53 const uint32_t era = year / 400;
54 const uint32_t yoe = year - era * 400;
55 const uint32_t doy = (153 * (month + (month > 2 ? -3 : 9)) + 2) / 5 + day - 1;
56 const uint32_t doe = yoe * 365 + yoe / 4 - yoe / 100 + doy;
57 return era * 146097 + doe - 719468;
68 const time_t seconds_time_t =
static_cast<time_t
>(seconds_64);
70 if(seconds_64 - seconds_time_t != 0) {
74 return std::chrono::system_clock::from_time_t(seconds_time_t);
79 std::stringstream output;
80 output << std::setfill(
'0') << std::setw(4) <<
year() <<
"-" << std::setw(2) <<
month() <<
"-" << std::setw(2)
81 <<
day() <<
"T" << std::setw(2) <<
hour() <<
":" << std::setw(2) <<
minutes() <<
":" << std::setw(2)
87 std::tm tm = do_gmtime(std::chrono::system_clock::to_time_t(time_point));
89 m_year = tm.tm_year + 1900;
90 m_month = tm.tm_mon + 1;
93 m_minutes = tm.tm_min;
94 m_seconds = tm.tm_sec;
#define BOTAN_ARG_CHECK(expr, msg)
uint64_t seconds_since_epoch() const
std::string to_string() const
std::chrono::system_clock::time_point to_std_timepoint() const
calendar_point(uint32_t y, uint32_t mon, uint32_t d, uint32_t h, uint32_t min, uint32_t sec)