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.

Reply via email to