NIST-Time is an implementation of Mike Doty's code with suggestions by Clay Clear and Bob Scot since the original code. Many thanks to Mike.
This version is without sound and simply reports via a message box, by default. I've concentrated on the time collection aspect since I live some distance from the time servers used.
The NIST servers advance the time by 50 millisecnds to "partially compensate for network delays". Personally, I feel this is slightly higher than needed for US citizens and not enough for the rest of us. This compensation has been removed and replaced by an estimate of the return trip time or latency. For example, the latency for me in West London, England and Boulder, Colorado is about 75ms. For San José, California it is more like 95ms. Tests have shown that this latency approach works quite well.
The NIST servers used are those listed here and put into TimeServers.dat. They are first randomly shuffled before trying them in turn. I've scheduled NIST-Time to execute every 12 hours so, with 17 servers, and assuming a success on the first try then, on average, they are being queried more than a week apart.
The output takes the following form:
The first line tells us the name of the first server to successfully give the time and the number in square brackets tells us how many servers were actually queried, including the success. The next line shows the full time stamp applied to our system and the following line tells us the correction that was applied. The next line tells us the latency estimate used.
A typical line in TimeServers.dat takes the form:
"nist1.columbiacountyga.gov","Columbia County, Georgia",0
The third item is the numbers of failed queries. This is a recent addition to the code which I've been using for a few years now so I don't have any long term stats yet, although three servers are starting to stand out with the rest still on zero. If this persists then I may drop those three and just use 14 - still a good number. Obviously, these figures can be reset via a text editor but an easier way is to run the application manually via a command line using the switch /reset. In this case the time element of the application is bypassed, only the resetting is executed. As with other switches this is not space or case sensitive.
The last thing we want on scheduling is an output. This can be suppressed with the switch /silent.
I have put a shortcut to NIST-Time in my StartUp folder so that my clock is corrected at boot time - handy if I'm away for a few days with the PC switched off. However, this would not be handy for those with dial-up so another switch is available for them. Three options should help here: /Wait:10, /Wait:15 and /Wait:20. These will suspend querying a server for 10, 15 or 20 minutes after the application starts - choose whichever is best. If you tend to go on-line fairly quickly after booting then '/Silent /Wait:10' should do just fine. If going on-line is usually after 20 minutes from booting then don't put NIST-Time in the StartUp folder.
There is no installation - I'm using C:\Program Files\NIST-Time\NIST-Time.exe and, of course, TimeServers.dat in the same folder.
Both files are in the following zip:
NIST-Time.zip
Added: Every now and then a leap second will either be added or subtracted at the end of the month. I knew a leap second would be added at the end of this month but I thought I was misreading the data because the message box should be telling us such. Some of the servers are now telling us that a leap second will be added this month. They are a bit late - it is Dec 6 in the UK. Fortunately, their time keeping is very much better.
I forgot to mention that the code also considers the servers' healthy flag - if they are not in rude health at the time of the query then we move onto the next server.

The NIST servers advance the time by 50 millisecnds to "partially compensate for network delays". Personally, I feel this is slightly higher than needed for US citizens and not enough for the rest of us. This compensation has been removed and replaced by an estimate of the return trip time or latency. For example, the latency for me in West London, England and Boulder, Colorado is about 75ms. For San José, California it is more like 95ms. Tests have shown that this latency approach works quite well.
The NIST servers used are those listed here and put into TimeServers.dat. They are first randomly shuffled before trying them in turn. I've scheduled NIST-Time to execute every 12 hours so, with 17 servers, and assuming a success on the first try then, on average, they are being queried more than a week apart.
The output takes the following form:

The first line tells us the name of the first server to successfully give the time and the number in square brackets tells us how many servers were actually queried, including the success. The next line shows the full time stamp applied to our system and the following line tells us the correction that was applied. The next line tells us the latency estimate used.
A typical line in TimeServers.dat takes the form:
"nist1.columbiacountyga.gov","Columbia County, Georgia",0
The third item is the numbers of failed queries. This is a recent addition to the code which I've been using for a few years now so I don't have any long term stats yet, although three servers are starting to stand out with the rest still on zero. If this persists then I may drop those three and just use 14 - still a good number. Obviously, these figures can be reset via a text editor but an easier way is to run the application manually via a command line using the switch /reset. In this case the time element of the application is bypassed, only the resetting is executed. As with other switches this is not space or case sensitive.
The last thing we want on scheduling is an output. This can be suppressed with the switch /silent.
I have put a shortcut to NIST-Time in my StartUp folder so that my clock is corrected at boot time - handy if I'm away for a few days with the PC switched off. However, this would not be handy for those with dial-up so another switch is available for them. Three options should help here: /Wait:10, /Wait:15 and /Wait:20. These will suspend querying a server for 10, 15 or 20 minutes after the application starts - choose whichever is best. If you tend to go on-line fairly quickly after booting then '/Silent /Wait:10' should do just fine. If going on-line is usually after 20 minutes from booting then don't put NIST-Time in the StartUp folder.

There is no installation - I'm using C:\Program Files\NIST-Time\NIST-Time.exe and, of course, TimeServers.dat in the same folder.
Both files are in the following zip:
NIST-Time.zip
Added: Every now and then a leap second will either be added or subtracted at the end of the month. I knew a leap second would be added at the end of this month but I thought I was misreading the data because the message box should be telling us such. Some of the servers are now telling us that a leap second will be added this month. They are a bit late - it is Dec 6 in the UK. Fortunately, their time keeping is very much better.

I forgot to mention that the code also considers the servers' healthy flag - if they are not in rude health at the time of the query then we move onto the next server.
Comment