На основании Тим Голден win32api docs, метод принимает кортеж следующего вида:
[0] INT: Bias
[1] строку: StandardName
[2] SYSTEMTIME tuple: StandardDate
[3] int: StandardBias
[4] строка: DaylightName
[5] SYSTEMTIME кортеж: DaylightDate
[6] INT: DaylightBias
Больше к точке, попробуйте win32api.GetTimeZoneInformation
(docs), чтобы увидеть, что кортеж должен чтобы выглядеть так, чтобы win32api.SetTimeZoneInformation
не стал жаловаться.
Edit: Получение необходимых привилегий
Вам нужна SE_TIME_ZONE_NAME
привилегию (см here). Существует удобная реализация изменяющихся привилегий, AdjustPrivilege
over here.
Собираем все вместе:
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))
@unice Позвольте мне знать, если он работал для вас – pandita
Извините за поздний ответ. Спасибо @pandita, он работает. Могу ли я изменить текущую дату и время на второй параметр? Потому что, когда я изменяю дату/время с помощью SetSystemTime, он автоматически добавит +8 часов или в зависимости от часового пояса. – unice
@pandita Если я хочу изменить часовой пояс на «Европу/Лондон», как я могу это сделать? Просто замена «Eastern Standard Time» не будет работать. Любое объяснение? Или, каковы все допустимые значения для этого аргумента? – swdev