Two common approaches:
1) update only periodically
2) update continuously
If you only care about close enough, approach 1 will be sufficient, perhaps once or twice per day, or as you see fit. You can use NTP utilities such as ntpdate to synchronize your clock with a remote server. This is essentially a one shot update, and you repeat (via cron, at boot time, or other mechanism) as necessary or desired. The problem with this approach is that is that time jumps forward or backwards, in irregular amounts of time when you sync.
If you need more precise time constantly, approach 2 is necessary, where you run an NTP protocol daemon that constantly adjusts the kernel's notion of a time increment, keeping your system's time very accurate. One commonly used NTP daemon is ntpd.
In either case, you select one or more NTP servers near you (in terms of fewest network hops and minimal latency), and configure your system to synchronize what those systems. Many sites ask that you send an email indicating your desire to use their time services, so check the site policy.
The highly detailed
http://www.ntp.org/ site explains as much as you'd like to know. Or use Wikipedia or other resource for more information.