使用Python转换从NTP服务器获取的日期

5 投票
2 回答
3293 浏览
提问于 2025-04-16 21:23

有没有办法把从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 个回答

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

替换为(注意:如果你还没有执行 from datetime import datetime,那么下面你应该使用 datetime.datetime.fromtimestamp,而不是简单的 datetime.fromtimestamp

formatted_time = datetime.fromtimestamp(utc_secs).strftime("%Y-%m-%d %H:%M:%S")

撰写回答