datetime

Steven D'Aprano steve+comp.lang.python at pearwood.info
Thu Sep 13 23:35:29 EDT 2012


On Thu, 13 Sep 2012 15:19:32 +0000, Max wrote:

> How do I set the time in Python?

You don't. You ask the operating system to set the time. If you don't 
have permission to change the time, which regular users shouldn't have 
because it is a security threat, it will (rightly) fail. E.g.:

import os
os.system('date -s %s' % date_str)

In Python 3.3 there is a wrapper in the time module that allows you to 
set the clock without an explicit system call. Again, you need permission 
to set the clock, or it will fail.


> Also, is there any *direct* way to shift it?
>
> Say, it's 09:00 now and Python makes it 11:30 *without* me having
> specified "11:30" but only given Python the 2h30m interval.

Certainly. Just call:

time.sleep(2*60**2 + 30*60)

and when it returns, the clock will have shifted forward by 2h30m, just 
like magic!

*wink*



> Note that any "indirect" methods may need complicated ways to keep track
> of the milliseconds lost while running them. It even took around one
> second in some virtual machine guest systems. So I'm hoping Python
> happens to have the magic needed to do the job for me.

No. Setting the clock is not the business of any user-space application. 
It is the job of the operating system, which will do it the right way. At 
most, the application can call the OS, directly or indirectly, but it has 
no control over how many milliseconds are lost when you do so.

On Linux, Unix or Mac, that right way is to use NTP, which will keep your 
computer's clock syncronised with a trusted external source. In a virtual 
machine, the right way is to use NTP to syncronise the VM host's time, 
and then tell the host to synchronise itself with the VM. On Windows, 
well you'll have to ask a Windows expert.

If you want to bypass NTP and manage time yourself -- say, you want to 
simulate "what happens when the clock strikes midnight?" without having 
to wait for midnight -- then you probably don't need millisecond 
precision. If you do need millisecond precision -- why??? -- *and* expect 
to do it from a user-space application, you're going to have a bad time.



-- 
Steven



More information about the Python-list mailing list