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