I currently maintain two windows based servers in the cloud with Elastic Hosts, one of my own and one for a client. On both I have scheduled tasks running and noticed that the time was slipping on the execution of these tasks over time. It became apparent that the server was unable to maintain the correct time and I was unable to figure out why so a quick email to the support team and the issue was solved within the hour!
It appears that the issue is the emulation of the hardware clock by the virtualization system. On Linux and other Unix based operating systems, the convention is that the hardware clock is permanently set to UTC (i.e. GMT without DST), and the operating system adjusts this for display. On DOS and Windows, the convention is that the hardware clock stores local time, and that the operating system adjusts this when DST starts and ends. The host cannot support both of these behaviours, since their virtualization layer does not know what operating system it will boot when it sets up the virtual hardware to start a server. As they have chosen the UTC behaviour something needs to change in my operating system to compensate for this.
The solution was to locate the following entry in the registry on the server:
Setting the value of this registry entry to 1 solved the problem for me. Further information on the topic can be found at http://www.cl.cam.ac.uk/~mgk25/mswish/ut-rtc.html