2

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

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)
4

1 回答 1

5

您正在从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)
于 2012-08-24T14:03:24.177 回答