[ntp:questions] POSIX Timestamp to NTP Timestamp

Matt Davis mattdavis9 at gmail.com
Tue Sep 28 23:02:54 UTC 2010


On Wed, Sep 29, 2010 at 8:56 AM, Dave Hart <davehart at gmail.com> wrote:
> On Tue, Sep 28, 2010 at 12:40 UTC, Matt Davis <mattdavis9 at gmail.com> wrote:
>> I am having some trouble converting a POSIX UTC timestamp into a NTP timestamp.
>> The former being from the epoch starting January 1, 1970 at 12AM and the latter
>> being that of January 1 1900 12AM.
>>
>> In summary my equation is this:
>>
>> /* Seconds between 1970 and 1900 (with 17 leap years) */
>> uint64_t epoch_difference = (365 + 17) * 24 * 60 * 60;
>>
>> uint64_t ntp_timestamp = (time(NULL) - epoch_difference) << 32;
>>
>> Unfortunately, when I interpret this value, I keep getting values in 2036.  I
>> know my version of time() is from the 1970 epoch.  So I am a tad confused here.
>
> As was said on irc.freenode.net #ntp in response to your question
> there, you are subtracting when you should be adding.  There are more
> seconds between now and 1900 than between now and 1970.  The NTP
> reference implementation has this code ready for you to use verbatim,
> liberally licensed.  See include/unixtime.h and libntp/systime.c,
> particularly get_systime().  Note in particular that the reference
> implementation disagrees with your code on the value of
> epoch_difference (referred to as JAN_1970 in the NTP code):
>
> #define JAN_1970        0x83aa7e80      /* 2208988800 1970 - 1900 in seconds */

Dave,
I do recall the addition mentioned in irc, but I was trying to get a
sanity check, as I was not having any luck either way (with addition).
 I appreciate your information.  I was not aware of the macro you
specified.

Thanks!

-Matt



More information about the questions mailing list