14 #define SECS_DAY (24L * 60L * 60L)
15 #define LEAPYEAR(year) (!((year) % 4) && (((year) % 100) || !((year) % 400)))
16 #define YEARSIZE(year) (LEAPYEAR(year) ? 366 : 365)
17 #define FIRSTSUNDAY(timp) (((timp)->tm_yday - (timp)->tm_wday + 420) % 7)
18 #define FIRSTDAYOF(timp) (((timp)->tm_wday - (timp)->tm_yday + 420) % 7)
19 #define TIME_MAX ULONG_MAX
22 static const int _ytab[2][12] = {
23 { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
24 { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
29 register unsigned long dayclock, dayno;
32 dayclock = (
unsigned long)time % SECS_DAY;
33 dayno = (
unsigned long)time / SECS_DAY;
35 timep->tm_sec = dayclock % 60;
36 timep->tm_min = (dayclock % 3600) / 60;
37 timep->tm_hour = dayclock / 3600;
38 while (dayno >= YEARSIZE(year)) {
39 dayno -= YEARSIZE(year);
42 timep->tm_year = year - YEAR0;
45 while (dayno >= _ytab[LEAPYEAR(year)][timep->tm_mon]) {
46 dayno -= _ytab[LEAPYEAR(year)][timep->tm_mon];
50 timep->tm_mday = dayno + 1;
static const nrf_drv_timer_t timer
Timer instance used for rtimer.
Utility functions for operating on UTC times.
void epoch_to_tm(const time_t *timer, struct tm *const tmp)
Convert a UNIX epoch to a tm struct.