58 #if !defined(_POSIX_C_SOURCE)
59 #define _POSIX_C_SOURCE 201410L
67 #define SECS_PER_DAY (24 * 60 * 60)
70 #if defined(OPENSSL_WINDOWS)
71 if (gmtime_s(
result, time)) {
76 return gmtime_r(time,
result);
82 return (1461 * (
y + 4800 + (
m - 14) / 12)) / 4 +
83 (367 * (
m - 2 - 12 * ((
m - 14) / 12))) / 12 -
84 (3 * ((
y + 4900 + (
m - 14) / 12) / 100)) / 4 +
d - 32075;
89 long n = (4 *
L) / 146097;
92 L =
L - (146097 *
n + 3) / 4;
93 i = (4000 * (
L + 1)) / 1461001;
94 L =
L - (1461 *
i) / 4 + 31;
96 *
d =
L - (2447 * j) / 80;
98 *
m = j + 2 - (12 *
L);
99 *
y = 100 * (
n - 49) +
i +
L;
104 long *pday,
int *psec) {
105 int offset_hms, offset_day;
107 int time_year, time_month, time_day;
112 offset_day += off_day;
114 offset_hms +=
tm->tm_hour * 3600 +
tm->tm_min * 60 +
tm->tm_sec;
119 }
else if (offset_hms < 0) {
126 time_year =
tm->tm_year + 1900;
127 time_month =
tm->tm_mon + 1;
128 time_day =
tm->tm_mday;
133 time_jd += offset_day;
145 int time_sec, time_year, time_month, time_day;
149 if (!
julian_adj(
tm, off_day, offset_sec, &time_jd, &time_sec)) {
157 if (time_year < 1900 || time_year > 9999) {
163 tm->tm_year = time_year - 1900;
164 tm->tm_mon = time_month - 1;
165 tm->tm_mday = time_day;
167 tm->tm_hour = time_sec / 3600;
168 tm->tm_min = (time_sec / 60) % 60;
169 tm->tm_sec = time_sec % 60;
175 const struct tm *
to) {
176 int from_sec, to_sec, diff_sec;
177 long from_jd, to_jd, diff_day;
186 diff_day = to_jd - from_jd;
187 diff_sec = to_sec - from_sec;
189 if (diff_day > 0 && diff_sec < 0) {
193 if (diff_day < 0 && diff_sec > 0) {
199 *out_days = (
int)diff_day;
202 *out_secs = diff_sec;