Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 21, 2017 14:54:38

sinbad13
Зарегистрирован: 2014-09-25
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Генерация ntp метки на основе timestamp

Всем привет! Имеется задача получить ntp метку из timestamp в данный момент времени.
Есть данные: timestamp 1447440534 и ntp 15704244410975025152, это 13 ноября 2015 18:48:54

Есть функция получения на Си:

 #include <iostream>
constexpr uint64_t epochdelta = 2208988800L;
int main()
{
    uint64_t num= 15704244410975025152ULL;
    uint32_t seconds  = (uint32_t)(num >> 32);
    std::cout << seconds << " seconds since 1900"  << std::endl;
    std::cout << seconds - epochdelta << " seconds since 1970" << std::endl;
    return 0;
}

Пытаюсь в обратном порядке написать для Питона, пока имеется:

 import time
 timestamp = int(time.time())
 print timestamp
 # >> 1487608712
 ntpstamp = int(timestamp + 2208988800)
 print ntpstamp
 # >> 3696597512

Далее из 3696597512 вроде как необходимо сделать маску первых 32 бит, пока с масками не сталкивался, нашел информацию про &= 0xfffffff0.
Применение:
 ntpstamp &= 0xfffffff0
 # >> 3696597512
 
дает тот же результат 3696597512, что я делаю неправильно?)

Отредактировано sinbad13 (Фев. 21, 2017 14:57:23)

Офлайн

#2 Фев. 21, 2017 14:57:43

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8179
Репутация: +  563  -
Профиль   Отправить e-mail  

Генерация ntp метки на основе timestamp

sinbad13
ntpstamp = int(str(timestamp + 2208988800))
Объясните, зачем числа кастовать к строке и сразу же к числу. Этому есть рациональное объяснение?



Онлайн

#3 Фев. 21, 2017 15:09:19

sinbad13
Зарегистрирован: 2014-09-25
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Генерация ntp метки на основе timestamp

FishHook
Сначала да, там был такой код
 ntpstamp = int(str(timestamp + 2208988800) + '00000000')

В интернете находил js решение, попробовал так же подставить, но так и не получилось, поэтому отказался от него, а преобразование осталось)

Офлайн

#4 Фев. 22, 2017 19:53:32

sinbad13
Зарегистрирован: 2014-09-25
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Генерация ntp метки на основе timestamp

Все оказалось гораздо проще

 ntpstamp32bit = (ntpstamp << 32)
 print ntpstamp32bit
 # >> 15877526162302304256

Отредактировано sinbad13 (Фев. 22, 2017 19:57:06)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version