2022-10-19 19:11:38 +00:00
|
|
|
#include <stdio.h>
|
2022-10-30 08:09:03 +00:00
|
|
|
#include <time.h>
|
2022-10-19 19:11:38 +00:00
|
|
|
|
2022-10-30 09:31:59 +00:00
|
|
|
#define VALUE_SINGULAR_AT_ONE(v) v, v == 1 ? "" : "s"
|
|
|
|
|
2022-10-19 19:11:38 +00:00
|
|
|
int main()
|
|
|
|
{
|
2022-10-30 08:09:03 +00:00
|
|
|
struct timespec tp;
|
|
|
|
clock_gettime(CLOCK_MONOTONIC, &tp); // On Luna, CLOCK_MONOTONIC starts at boot.
|
2022-10-19 19:11:38 +00:00
|
|
|
|
2022-10-30 09:31:59 +00:00
|
|
|
struct tm* time = gmtime(
|
|
|
|
&tp.tv_sec); // just splitting the value into seconds, minutes, hours, days... not the best way to do it but ok.
|
|
|
|
time->tm_year -= 70;
|
|
|
|
|
|
|
|
if (time->tm_year)
|
|
|
|
{
|
|
|
|
printf("up for %d year%s, %d day%s, %d hour%s, %d minute%s, %d second%s\n",
|
|
|
|
VALUE_SINGULAR_AT_ONE(time->tm_year), VALUE_SINGULAR_AT_ONE(time->tm_yday),
|
|
|
|
VALUE_SINGULAR_AT_ONE(time->tm_hour), VALUE_SINGULAR_AT_ONE(time->tm_min),
|
|
|
|
VALUE_SINGULAR_AT_ONE(time->tm_sec));
|
|
|
|
}
|
|
|
|
else if (time->tm_yday)
|
|
|
|
{
|
|
|
|
printf("up for %d day%s, %d hour%s, %d minute%s, %d second%s\n", VALUE_SINGULAR_AT_ONE(time->tm_yday),
|
|
|
|
VALUE_SINGULAR_AT_ONE(time->tm_hour), VALUE_SINGULAR_AT_ONE(time->tm_min),
|
|
|
|
VALUE_SINGULAR_AT_ONE(time->tm_sec));
|
|
|
|
}
|
|
|
|
else if (time->tm_hour)
|
|
|
|
{
|
|
|
|
printf("up for %d hour%s, %d minute%s, %d second%s\n", VALUE_SINGULAR_AT_ONE(time->tm_hour),
|
|
|
|
VALUE_SINGULAR_AT_ONE(time->tm_min), VALUE_SINGULAR_AT_ONE(time->tm_sec));
|
|
|
|
}
|
|
|
|
else if (time->tm_min)
|
|
|
|
printf("up for %d minute%s, %d second%s\n", VALUE_SINGULAR_AT_ONE(time->tm_min),
|
|
|
|
VALUE_SINGULAR_AT_ONE(time->tm_sec));
|
|
|
|
else
|
|
|
|
printf("up for %d second%s\n", VALUE_SINGULAR_AT_ONE(time->tm_sec));
|
2022-10-19 19:11:38 +00:00
|
|
|
}
|