在Python中,使用win32api不会设置正确的日期

时间:2012-08-24 13:50:32

标签: python windows winapi time

我正在尝试使用以下代码设置系统日期(而不是时间)。我想将当前时间设置为新日期。以下是示例代码,我发现更改后的时间不正确。

day = 20
month = 3
year = 2010

timetuple = time.localtime()
print timetuple
print timetuple[3], timetuple[4], timetuple[5]
win32api.SetSystemTime(year, month, timetuple[6]+1, 
    day, timetuple[3], timetuple[4], timetuple[5], 1)

1 个答案:

答案 0 :(得分:6)

您正在从localtime时间戳设置系统时间。后者根据当地时区进行调整,而SetSystemTime requires you to use the UTC timezone

改为使用time.gmtime()

tt = time.gmttime()
win32api.SetSystemTime(year, month, 0, day, 
    tt.tm_hour, tt.tt_min, tt.tt_sec, 0)

然后你还可以避免现在处理你是否处于夏令时(DST),而不是处理冬季时的三月。

或者你可以使用datetime.datetime.utcnow() call并获得毫秒参数作为奖励:

import datetime
tt = datetime.datetime.utcnow().time()
win32api.SetSystemTime(year, month, 0, day,
    tt.hour, tt.minute, tt.second, tt.microsecond//1000)

请注意,我在两个示例中都将工作日项目设置为0;调用SetSystemTime时会忽略它。如果忽略 ,那么您的代码示例的值错误;对于星期一到星期日,Python值的范围是0到6,而对于星期日到星期六,Win32 API需要1到7 。你必须添加2并使用modulo 7:

win32_systemtime_weekday = (python_weekday + 2) % 7)