The time problem may be due to a failing battery. To determine if the time loss is a result of a weak computer battery:
Click Start, point to Programs, and then click MS-DOS Prompt.
At the command prompt, type time, and then press ENTER.
Compare this time with the time that is reported by the clock on the taskbar.
Type exit, and then press ENTER.
If the computer's time and the time on the clock are different, the computer's battery may be too weak to keep accurate time, and it should be replaced.
There can be ACPI issues, antivirus software issues and screensaver issues leading to the clock failing to keep accurate time:
You should be using an external time resource to set the PDC.
Administrators can configure the Time service on the PDC operations master at the root of the forest to recognize an external Simple Network Time Protocol (SNTP) time server as authoritative by using the following net time command, where server_list is the server list:
net time /setsntp:server_list
The Microsoft documentation about the Net Time /setsntp command says that you can specify a list of servers in the command. And you can, but with a trick: Enclose the list in quotation marks, and separate server names with a space. For example, to tell your server to look for the time first at ntp2.usno.navy.mil, and if there is a failure to look seond at tock.usno.navy.mil:
net time /setsntp:"ntp2.usno.navy.mil,tock.usno.navy.mil"
There are several SNTP time servers run by the U.S. Naval Observatory that are satisfactory for this function, for example:
. ntp2.usno.navy.mil at 192.5.41.209
. tock.usno.navy.mil at 192.5.41.41
SNTP defaults to using UDP port 123. If this port is not open to the Internet, you cannot synchronize your server to Internet SNTP servers.
After you set the SNTP time server as authoritative, Microsoft suggests that you run either of the following commands on a computer other than the domain controller to reset the local computer's time against the authoritative time server:
net time /your domain name /set
-or-
Type the following commands, pressing ENTER after each command:
net stop w32time
w32tm –once
net start w32time
In my experience, only the second method works reliably.