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" <[email protected]>
To: <[email protected]>
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 -- [email protected]
To unsubscribe, go to https://www.febo.com/cgi-bin/mailman/listinfo/time-nuts
and follow the instructions there.