Mark, Ben, Paul, 32-bit integers is sufficient. Use days instead of seconds. Use MJD instead of JD. Here's an example:
Step 1, convert calendar date to MJD, and then to GPS day: // Convert year, month (1-12), and day (1-31) to Modified Julian Day (MJD). // Adapted from sci.astro FAQ (valid for Gregorian dates from 17-Nov-1858). int32 ymd_to_mjd (int32 yyyy, int32 mm, int32 dd) { return 367 * yyyy - 7 * (yyyy + (mm + 9) / 12) / 4 - 3 * ((yyyy + (mm - 9) / 7) / 100 + 1) / 4 + 275 * mm / 9 + dd + 1721028 - 2400000; } #define MJD_TO_GPS_DAY(mjd) ((mjd) + 44244) Step 2, apply leap seconds since 1980 using table look-up. /tvb ----- Original Message ----- From: "Mark Sims" <hol...@hotmail.com> To: <time-nuts@febo.com> Sent: Saturday, May 13, 2017 6:58 PM Subject: [time-nuts] GPS seconds conversion on an Arduino > Converting GPS seconds to Gregorian date/time on the Arduino will be an > arduous task. You take GPS seconds and add it to the GPS starring epoch to > get a Julian date. Then add in the number of leap seconds as a fraction of a > day to get UTC and possibly add in a time zone offset for local time. Don't > forget to do daylight savings time conversion... Then convert the result to > Gregorian date/time for display. > > The problem is the Arduino floating point library is single precision only > and does not have the resolution needed to handle the numbers involved. > Doing it with integer arithmetic (long longs) opens up a whole new can of > worms. > _______________________________________________ time-nuts mailing list -- time-nuts@febo.com To unsubscribe, go to https://www.febo.com/cgi-bin/mailman/listinfo/time-nuts and follow the instructions there.