|
|
- // Shim original TimeLib functions
-
- #pragma once
-
- constexpr time_t daysPerWeek = 7;
-
- constexpr time_t secondsPerMinute = 60;
- constexpr time_t secondsPerHour = 3600;
- constexpr time_t secondsPerDay = secondsPerHour * 24;
- constexpr time_t secondsPerWeek = daysPerWeek * secondsPerDay;
-
- constexpr time_t secondsPerYear = secondsPerWeek * 52;
- constexpr time_t secondsY2K = 946684800; // the time at the start of y2k
-
- // wall clock values
- constexpr const time_t numberOfSeconds(uint32_t ts) {
- return (ts % secondsPerMinute);
- }
-
- constexpr const time_t numberOfMinutes(uint32_t ts) {
- return ((ts / secondsPerMinute) % secondsPerMinute);
- }
-
- constexpr const time_t numberOfHours(uint32_t ts) {
- return ((ts % secondsPerDay) / secondsPerHour);
- }
-
- // week starts with sunday as number 1, monday as 2 etc.
- constexpr const time_t dayOfWeek(time_t ts) {
- return ((ts / secondsPerDay + 4) % daysPerWeek) + 1;
- }
-
- // the number of days since 0 (Jan 1 1970 in case of time_t values)
- constexpr const time_t elapsedDays(uint32_t ts) {
- return (ts / secondsPerDay);
- }
-
- // the number of seconds since last midnight
- constexpr const time_t elapsedSecsToday(uint32_t ts) {
- return (ts % secondsPerDay);
- }
-
- // The following methods are used in calculating alarms and assume the clock is set to a date later than Jan 1 1971
- // Always set the correct time before settting alarms
-
- // time at the start of the given day
- constexpr const time_t previousMidnight(time_t ts) {
- return ((ts / secondsPerDay) * secondsPerDay);
- }
-
- // time at the end of the given day
- constexpr const time_t nextMidnight(time_t ts) {
- return previousMidnight(ts) + secondsPerDay;
- }
-
- // note that week starts on day 1
- constexpr const time_t elapsedSecsThisWeek(uint32_t ts) {
- return elapsedSecsToday(ts) + ((dayOfWeek(ts) - 1) * secondsPerDay);
- }
-
- // time at the start of the week for the given time
- constexpr const time_t previousSunday(time_t ts) {
- return ts - elapsedSecsThisWeek(ts);
- }
-
- // time at the end of the week for the given time
- constexpr const time_t nextSunday(time_t ts) {
- return previousSunday(ts) + secondsPerWeek;
- }
-
- year(t), month(t), day(t), hour(t), minute(t), second(t)
-
- static time_t _ntp_ts = 0;
- static tm _ntp_tm;
-
- void _ntpTmCache(time_t ts) {
- if (_ntp_tm != ts) {
- _ntp_ts = ts;
- localtime_r(_ntp_ts, _ntp_tm);
- }
- }
-
- int hour(time_t ts) {
- _ntpTmCache(ts);
- return _ntp_tm.tm_hour;
- }
-
- int minute(time_t ts) {
- _ntpTmCache(ts);
- return _ntp_tm.tm_min;
- }
-
- int second(time_t ts) {
- _ntpTmCache(ts);
- return _ntp_tm.tm_sec;
- }
-
- int day(time_t ts) {
- _ntpTmCache(ts);
- return _ntp_tm.tm_day;
- }
-
- int weekday(time_t ts) {
- _ntpTmCache(ts);
- return _ntp_tm.tm_wday;
- }
-
- int month(time_t ts) {
- _ntpTmCache(ts);
- return _ntp_tm.tm_mon;
- }
-
- int year(time_t ts) {
- _ntpTmCache(ts);
- return _ntp_tm.tm_year;
- }
-
- time_t now() {
- return time(nullptr);
- }
|