Конвертировать дату, полученную с ntp сервера с помощью python - PullRequest
5 голосов
/ 13 июля 2011

Можно ли преобразовать время, полученное с NTP-сервера (с помощью скрипта Python), в этот формат «Ср. 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

Я получаю этот формат: «Ср. 13 июля 00:17:58 CEST 2011»

Я хочу преобразовать это в этот формат "2011-07-13 00:17:58" ('% Y-% m-% d% H:% M:% S')

Спасибо:)

Ответы [ 2 ]

2 голосов
/ 13 июля 2011

В вашем случае вы можете перейти непосредственно от количества секунд к желаемому формату времени;однако, я объясню общее решение перед точным фрагментом для вашего случая внизу.

В общем, этот тип проблемы решается с помощью 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")
1 голос
/ 13 июля 2011
>>> 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'
...