使用python转换从ntp服务器检索的日期

rap*_*ell 5 python format date ntp

是否有可能将从NTP服务器(使用python脚本)检索的时间转换为此格式"Wed Jul 13 00:17:58 CEST 2011"到此格式"2011-07-13 00:18:10"

    client = socket(AF_INET, SOCK_DGRAM)
    data = '\x1b' + 47 * '\0'
    client.sendto(data, (ntp.server.com,123))
    data, address = client.recvfrom( 1024 )
    if data:
        utc_secs = struct.unpack('!12I', data)[10]
        utc_secs -= 2208988800L
        utc_secs = time.ctime(utc_secs)
        print utc_secs
        return utc_secs
Run Code Online (Sandbox Code Playgroud)

我得到这种格式:"Wed Jul 13 00:17:58 CEST 2011"

我想把它转换成这种格式"2011-07-13 00:17:58"('%Y-%m-%d%H:%M:%S')

谢谢 :)

she*_*mer 3

根据您的情况,您可以直接从秒数转到您想要的时间格式;不过,我将在底部的案例的确切片段之前解释一般解决方案。

一般来说,此类问题可以借助strptimestrftime来解决。您还应该参考python 文档中的格式化代码。

strptime()匹配日期字符串的各个部分并创建 python 时间结构。strftime()然后可以用来将该时间结构转换为您想要的任何格式。

from datetime import datetime
ntp_time = datetime.strptime(time_str_from_ntp, "%a %b %y %H:%M:%S")
formatted_time = datetime.strftime(ntp_time, "%Y-%m-%d %H:%M:%S")
Run Code Online (Sandbox Code Playgroud)

或者根据您的具体情况,您可以替换

utc_secs = time.ctime(utc_secs)
Run Code Online (Sandbox Code Playgroud)

with (注意:如果你还没有这样做,from datetime import datetime那么你应该使用datetime.datetime.fromtimestamp下面的而不是简单的datetime.fromtimestamp

formatted_time = datetime.fromtimestamp(utc_secs).strftime("%Y-%m-%d %H:%M:%S")
Run Code Online (Sandbox Code Playgroud)