I don’t own a stand-alone GPS device myself, but my dad does. A TomTom something. I do however own a Samsung Galaxy S2 myself with a builtin GPS. What they have in common is that you have to tell them the time of day. Now I can use a NTP sync app on my phone and have it synchronize to gain an accuracy of within 10ms under good conditions.
The thing is – they already know the current date and time. They already know it with *a lot* more precision. They just don’t use that information.
The principle behind GPS is really quite simple. Every satellite have an onboard ceasium based atomic clock, so that they know the time with a very high precision. They constantly broadcast their time and location. As we know the speed of light (or radiowaves) we can calculate the distance to the satellite if we ourself knows the time. Now if we know the position and distance of three satellites, we can with some simple trigonometry calculate our own position. If we know the position and time of more than three satellites but not our own time, we can actually compute both our own time and position.
Actually we don’t even have to know our position very well to find the time with very high accuracy. So we don’t even have to get a fix on enough satellites to know our position. As the speed of light is about 300,000,000 m/s we will just by knowing our position to within 300 km know the time to within 1 ms of precision. GPS will usually let us know our position to within 20 m which gives us a time precision of about 67 ns (yes, nanoseconds), and the location services on android can usually tell you your position with even more precision by taking other parameters into account. But even without knowing our position at all we could still get the time with more than about 100 ms precision from any satellite, as their orbit altitude are around 20200 km.
So why again do I have to tell my GPS device the current date and time?