summaryrefslogtreecommitdiffstats
path: root/watch-library
diff options
context:
space:
mode:
authorWesley Ellis <tahnok@gmail.com>2021-11-23 21:32:25 -0500
committerWesley Ellis <tahnok@gmail.com>2021-11-23 21:32:25 -0500
commit653dd862b8bb6f40a55295e6fc9325b052d30b3d (patch)
treeff48a66624573886ce5316783f868ab810bac7b3 /watch-library
parentf9e3dc865dc8d31bebe8158bbcd3fa2a47dc95a0 (diff)
downloadSensor-Watch-653dd862b8bb6f40a55295e6fc9325b052d30b3d.tar.gz
Sensor-Watch-653dd862b8bb6f40a55295e6fc9325b052d30b3d.tar.bz2
Sensor-Watch-653dd862b8bb6f40a55295e6fc9325b052d30b3d.zip
Fill out watch_utility_convert_to_unix_time
Diffstat (limited to 'watch-library')
-rw-r--r--watch-library/watch/watch_utility.c30
1 files changed, 28 insertions, 2 deletions
diff --git a/watch-library/watch/watch_utility.c b/watch-library/watch/watch_utility.c
index 0e95d4dc..df808404 100644
--- a/watch-library/watch/watch_utility.c
+++ b/watch-library/watch/watch_utility.c
@@ -36,8 +36,34 @@ const char * watch_utility_get_weekday(watch_date_time date_time) {
}
uint32_t watch_utility_convert_to_unix_time(uint16_t year, uint8_t month, uint8_t day, uint8_t hour, uint8_t minute, uint8_t second, uint32_t utc_offset) {
- // TODO
- return 0;
+ uint16_t DAYS_SO_FAR[] = {
+ 0, // Jan
+ 31, // Feb
+ 59, // March
+ 90, // April
+ 120, // May
+ 151, // June
+ 181, // July
+ 212, // August
+ 243, // September
+ 273, // October
+ 304, // November
+ 334 // December
+ };
+
+
+ uint32_t year_adj = year + 4800;
+ uint32_t febs = year_adj - (month <= 2 ? 1 : 0); /* Februaries since base. */
+ uint32_t leap_days = 1 + (febs / 4) - (febs / 100) + (febs / 400);
+ uint32_t days = 365 * year_adj + leap_days + DAYS_SO_FAR[month - 1] + day - 1;
+ days -= 2472692; /* Adjust to Unix epoch. */
+
+ uint32_t timestamp = days * 86400;
+ timestamp += (hour + utc_offset) * 3600;
+ timestamp += minute * 60;
+ timestamp += second;
+
+ return timestamp;
}
uint32_t watch_utility_date_time_to_unix_time(watch_date_time date_time, uint32_t utc_offset) {