guo898989 2024-05-11 06:57 采纳率: 25%
浏览 9

python如何检查互联网时间是否同步并作出同步对策

我用编写了一个量化程序,并且租了一个服务器运行这个程序,但是在下单和查询账户余额时偶尔会出现如下报错:

binance {"code":-1021,"msg":"Timestamp for this request was 1000ms ahead of the server's time."}
查了下原因应该是优于服务器的网络不稳定造成的本地时间和交易所的互联网时间不一致造成的。

如何在python编写一段代码,这段代码目的是在下单前现检测一下互联网时间是否同步,如果不同步则采取措施进行同步,避免下单失败。

  • 写回答

2条回答 默认 最新

  • 笑面虎 2024-05-11 08:47
    关注

    以下内容由CHATGPT及笑面虎共同生成、有用望采纳:


    【您想要解决的问题】:您想要解决的问题是如何在Python程序中检查服务器的本地时间是否与互联网时间同步,并在发现不同步时采取措施进行同步,以避免在量化交易程序中因时间不同步导致下单失败的问题。

    【问题出现原因】:问题出现的原因是服务器的网络不稳定,导致本地时间与交易所服务器的时间不一致。交易所的API在处理请求时会检查时间戳,如果请求的时间戳与服务器时间相差过多,就会认为请求无效,从而返回错误。

    【问题解决方案】:为了解决这个问题,您可以使用Python的time模块和第三方的NTP(Network Time Protocol)服务来获取互联网上的标准时间,并与服务器的本地时间进行比较。如果检测到时间不同步,可以通过调整服务器的系统时间来实现同步。

    【提供代码】:

    import time
    import subprocess
    import requests
    
    def get_internet_time():
        # 使用NIST的NTP服务来获取互联网时间
        response = requests.get('http://time.nist.gov/actualtimezone.cgi')
        # 解析时间字符串
        time_str = response.text.splitlines()[-1].split('=')[-1]
        # 将时间字符串转换为time.struct_time对象
        return time.strptime(time_str, '%Y-%m-%d %H:%M:%S %Z')
    
    def sync_time():
        # 获取互联网时间
        internet_time = get_internet_time()
        # 获取当前系统时间
        current_time = time.gmtime()
        # 计算时间差(秒)
        time_diff = time.mktime(internet_time) - time.mktime(current_time)
        # 如果时间差超过了阈值(比如1秒),则进行同步
        if abs(time_diff) > 1:
            # 在这里设置阈值为1秒
            # 使用系统命令调整时间
            subprocess.run(['sudo', 'date', '-s', time.strftime('%Y-%m-%d %H:%M:%S', internet_time)])
    
    # 在下单前检查并同步时间
    sync_time()
    

    【代码运行方式】:这段代码需要在服务器上运行,您需要确保Python和requests库已经安装,并且您的用户有权限运行sudo date命令来调整系统时间。

    【代码预期运行结果】:如果服务器的本地时间与互联网时间相差超过1秒,代码将执行时间同步操作,将服务器时间调整为互联网时间。

    【推荐相关链接】:

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月11日