您正在从localtime
时间戳设置系统时间。后者针对本地时区进行了调整,同时SetSystemTime
要求您使用 UTC timezone。
改用time.gmtime()
:
tt = time.gmttime()
win32api.SetSystemTime(year, month, 0, day,
tt.tm_hour, tt.tt_min, tt.tt_sec, 0)
然后,您还不必处理您现在是否处于夏令时 (DST),而不是在 3 月时您将处于冬季。
或者,您可以使用datetime.datetime.utcnow()
调用并获得毫秒参数作为奖励:
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 并使用模 7:
win32_systemtime_weekday = (python_weekday + 2) % 7)