if (*tail == '-') tz *= -1;
done:
- t = fr_time_from_utc(tm);
+ *date = fr_unix_time_from_utc(tm);
/*
* Add in the time zone offset, which the posix
* functions are too stupid to do.
*/
- t += tz;
-
- *date = fr_unix_time_from_timeval(&(struct timeval) { .tv_sec = t });
+ *date += fr_unix_time_from_sec(tz);
*date += subseconds;
+
return 0;
}
tm->tm_min = atoi(f[1]);
}
- t = fr_time_from_utc(tm);
-
- /*
- * Get the UTC time, and manually add in the offset from GMT.
- */
- *date = fr_unix_time_from_timeval(&(struct timeval) { .tv_sec = t });
+ *date = fr_unix_time_from_utc(tm);
/*
* Add in the time zone offset, which the posix
/*
* Based on https://blog.reverberate.org/2020/05/12/optimizing-date-algorithms.html
*/
-fr_unix_time_t fr_time_from_utc(struct tm *tm)
+fr_unix_time_t fr_unix_time_from_utc(struct tm *tm)
{
static const uint16_t month_yday[12] = {0, 31, 59, 90, 120, 151,
181, 212, 243, 273, 304, 334};
* 2472692 adjusts the days for Unix epoch. It is calculated as
* (365.2425 * (4800 + 1970))
*/
- return (days - 2472692) * 86400 + (tm->tm_hour * 3600) + (tm->tm_min * 60) + tm->tm_sec;
+ return fr_unix_time_from_sec((days - 2472692) * 86400 + (tm->tm_hour * 3600) + (tm->tm_min * 60) + tm->tm_sec);
}
void fr_time_elapsed_update(fr_time_elapsed_t *elapsed, fr_time_t start, fr_time_t end) CC_HINT(nonnull);
void fr_time_elapsed_fprint(FILE *fp, fr_time_elapsed_t const *elapsed, char const *prefix, int tabs) CC_HINT(nonnull(1,2));
-fr_unix_time_t fr_time_from_utc(struct tm *tm) CC_HINT(nonnull);
+fr_unix_time_t fr_unix_time_from_utc(struct tm *tm) CC_HINT(nonnull);
#ifdef __cplusplus
}