Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python模块设置本地时间和日期_Python_Date_Winapi_Time - Fatal编程技术网

Python模块设置本地时间和日期

Python模块设置本地时间和日期,python,date,winapi,time,Python,Date,Winapi,Time,根据-我们可以使用此代码更改系统时间。我已经修改了这段代码并对其进行了相应的更改,但是执行脚本会将时间更改为UTC格式,但大约10秒后会更新为正确的时间。这种无法解释的行为促使我改为使用SetLocalTime方法。然而,我无法让它工作 import socket import struct import sys import time import win32api TIME1970 = 2208988800 client = socket.socket(socket.AF_INET, s

根据-我们可以使用此代码更改系统时间。我已经修改了这段代码并对其进行了相应的更改,但是执行脚本会将时间更改为UTC格式,但大约10秒后会更新为正确的时间。这种无法解释的行为促使我改为使用
SetLocalTime
方法。然而,我无法让它工作

import socket
import struct
import sys
import time
import win32api

TIME1970 = 2208988800

client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
data = '\x1b' + 47 * '\0'
client.sendto(data.encode(), ('10.0.0.1', 123))
data, address = client.recvfrom(1024)
if data:
    print('Response received from:', address)
    t = struct.unpack('!12I', data)[10]
    t -= TIME1970
    tf = time.strptime(time.ctime(t))

time_tuple = (tf[0], # Year
            tf[1], # Month
            tf[6], # Day of Week
            tf[2], # Day
            tf[3], # Hour
            tf[4], # Minute
            tf[5], # Second
            0,#int(round(tf[5] * 1000)), # Millisecond
    )
print(tf)
win32api.SetLocalTime(*time_tuple)
返回时出现错误
TypeError:SetLocalTime()正好接受1个参数(给定8个)
。我知道SetLocalTime函数采用与
SetSystemTime
完全相同的参数,但事实并非如此

我在谷歌上找不到任何例子,所以我无法完成我的代码

如有任何建议,我们将不胜感激。谢谢。

win32api模块将结构字段包装为8个单独的函数参数。时间应以UTC的形式传递
wDayOfWeek
被忽略(即将其作为0传递)

win32api模块包装更方便、更习惯。它采用
datetime.datetime
实例,而不需要单独的参数。例如:

import datetime
import win32api

dt = datetime.datetime(2018, 1, 4, 14, 30)
win32api.SetLocalTime(dt)

调用进程的令牌必须具有SeSystemtimePrivilege,因此用户通常需要是提升的管理员。

@eryksun谢谢,它可以工作!我不知道它需要一个datetime.datetime实例。我试图使用pywin32.time方法和来自时间模块本身的方法,而不是datetime。