如何在Windows中使用python更改系统时区?

如何使用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))