使用python转换从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 * ''
    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')

谢谢:)

在你的情况下,你可以直接从秒数到你想要的时间格式;但是,我将在底部解释您的情况的确切代码片段之前解释一般解决方案。

一般来说,这类问题可以通过strptime和strftime的帮助来解决。你还应该参考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)

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

formatted_time = datetime.fromtimestamp(utc_secs).strftime("%Y-%m-%d %H:%M:%S")
>>> 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'

最新更新