5

是否可以将以这种格式“Wed Jul 13 00:17:58 CEST 2011”从 NTP 服务器(使用 python 脚本)检索到的时间转换为这种格式“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

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

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

谢谢 :)

4

2 回答 2

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")

或者在您的特定情况下,您可以替换

utc_secs = time.ctime(utc_secs)

with (注意:如果您还没有完成,from datetime import datetime那么您应该datetime.datetime.fromtimestamp在下面使用而不是简单地使用datetime.fromtimestamp

formatted_time = datetime.fromtimestamp(utc_secs).strftime("%Y-%m-%d %H:%M:%S")
于 2011-07-12T23:03:00.380 回答
1
>>> sec #your utc_secs
1310511730
>>> time.ctime(sec) #instead of this
'Wed Jul 13 02:02:10 2011'
>>> d = datetime.datetime.fromtimestamp(sec) #do this
>>> d   
datetime.datetime(2011, 7, 13, 2, 2, 10)
>>> d.strftime('%Y-%m-%d %H:%M:%S')
'2011-07-13 02:02:10'
于 2011-07-12T23:06:05.437 回答