如何使用python的win32api更改系统时区? 我试过使用SetTimeZoneInformation。
win32api.SetTimeZoneInformation(year, month, dayofweek, hour, minute, second, milliseconds)
这给了我一个毫秒参数的错误。
TypeError: Objects of type 'int' can not be converted to Unicode.
什么是SetTimeZoneInformation的参数? 文档说,它需要SE_TIME_ZONE_NAME的权限。 如何在Python中设置? 使用WMI?
谢谢,
基于Tim Golden的win32api文档 ,该方法采用以下形式的元组:
[0] int:偏差
[1]字符串:标准名称
[2] SYSTEMTIME元组:StandardDate
[3] int:StandardBias
[4]字符串:DaylightName
[5] SYSTEMTIME元组:DaylightDate
[6] int:DaylightBias
更重要的是,尝试win32api.GetTimeZoneInformation
( docs )看看这个元组应该是什么样子,以便win32api.SetTimeZoneInformation
不会抱怨。
编辑:获得必要的特权
您需要SE_TIME_ZONE_NAME
权限(请参阅此处 )。 有一个方便的实现更改权限, AdjustPrivilege
在这里 。
把它放在一起:
import ntsecuritycon, win32security, win32api def AdjustPrivilege( priv ): flags = ntsecuritycon.TOKEN_ADJUST_PRIVILEGES | ntsecuritycon.TOKEN_QUERY htoken = win32security.OpenProcessToken(win32api.GetCurrentProcess(), flags) id = win32security.LookupPrivilegeValue(None, priv) newPrivileges = [(id, ntsecuritycon.SE_PRIVILEGE_ENABLED)] win32security.AdjustTokenPrivileges(htoken, 0, newPrivileges) # Enable the privilege AdjustPrivilege(win32security.SE_TIME_ZONE_NAME) # Set the timezone win32api.SetTimeZoneInformation((-600,u'Eastern Standard Time',(2000,4,1,3,0,0,0,0),0,u'Eastern Daylight Time',(2000,10,1,2,0,0,0,0),-60))