El reloj por software de un sistema Linux no siempre es preciso. Para mantener este reloj Linux utiliza una interrupción periódica generada por el hardware, llamada "timer interrupt". En caso de que existan muchos procesos siendo ejecutados (con respecto a los recursos disponibles) el sistema podría demorar un poco al momento de intentar servir la interrupción, por lo que el reloj de software puede estar ligeramente atrasado. El reloj por hardware trabaja independientemente del sistema operativo, así que usualmente es mas preciso. Si re-inicia de manera frecuente la computadora (como es el caso para la mayoría de los sistemas que no son servidores) el reloj debe encontrarse prácticamente correcto.
Si es necesario modificar el reloj de hardware, la manera mas simple es reiniciar el sistema, ingresar a la pantalla de configuración de la BIOS y realizar el cambio de fecha y hora desde ahí. Esta manera evita todos los problemas que podrían suceder si se modifica el reloj desde el sistema. Si la modificación desde la configuración de la BIOS no se puede realizar, modifique el reloj utilizando date y clock (en ese orden), pero esté preparado para reiniciar Linux, si alguna parte del sistema comienza a actuar de manera extraña, mal y/o divertida. :)
Otro método posible para sincronizar el reloj de software es utilizar hwclock -w o hwclock --systohc. Ambos comandos obtienen la fecha y hora desde el reloj de hardware y modifican el reloj de software. Si en cambio desea sincronizar de manera inversa (modificar el reloj de hardware con la fecha y hora del reloj de software) entonces puede utilizar el comando hwclock -s o el comando hwclock --hctosys. Si desea conocer mayores detalles de este comando lea su página de manual ejecutando man hwclock.