The only problem with the "change the bios battery" answer is that it's presumptuous. I dual boot Windoze/Linux; and my Linux O/s never displays the wrong the time. Ever. Also, my mobo's bios battery is brand new; and the bios time is (also) correct.
Sadly, I've not found a solution - whether I sync with time.nist.gov, time-a.nist.gov, time-b.nist.gov or even time.windows.com, my Windows machine will either boot into the desktop environment with the time set 3 hours ahead; or change while in the active desktop. My Windows machine is also set to the correct time zone (Atlantic).
Setting a cronjob for windows to sync the time is hardly a solution for most end-users (since most people don't even know how to use Windows, let alone set a cronjob).