2011-07-12 548 views
5

是否有可能将这种格式为“Wed Jul 13 00:17:58 CEST 2011”的NTP服务器(使用python脚本)检索到的时间转换为这种格式“2011-07-13 ○时18分十秒“使用python从ntp服务器检索的转换日期

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 

我得到这个格式: ”周三7月13日○点17分58秒CEST 2011“

我打算将它转换成这种格式“2011-07-13 00: 17:58“('%Y-%m-%d%H:%M:%S')

谢谢:)

回答

2

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

通常这种类型的问题可以通过strptimestrftime的帮助来解决。你也应该参考python文档中的formatting codes

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