使用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 * '\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')。
谢谢 :)
2 个回答
在编程中,有时候我们需要把一些数据从一个地方转移到另一个地方。这就像把水从一个杯子倒到另一个杯子一样。这个过程可能会涉及到不同的工具和方法,具体取决于我们要处理的数据类型和目标。
比如说,如果我们有一个列表,里面装着很多数字,我们可能想把这些数字加起来,或者找出最大的那个。这些操作就像是在对杯子里的水进行不同的处理,有的可能是加水,有的可能是倒掉一些水。
在编程中,我们常常会用到循环和条件判断来帮助我们完成这些任务。循环就像是一个重复的动作,而条件判断则是根据情况来决定接下来要做什么。
总之,编程就像是在用代码来操控数据,帮助我们更高效地完成各种任务。
>>> 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'
在你的情况下,你可以直接把秒数转换成你想要的时间格式;不过我会先解释一下这个问题的一般解决方法,然后再给你具体的代码示例。
通常,这类问题可以通过使用 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")