Преобразование формата даты и времени в метку времени - PullRequest
0 голосов
/ 09 июля 2020

Вот мой код:

from dateutil import parser
import datetime

rTime = '2020-06-22T17:19:37.729000Z'
dateTimeRes = parser.isoparse(rTime)
naive = dateTimeRes.replace(tzinfo=None)
lastTime = (naive-datetime.datetime(1970,1,1)).total_seconds()
print ("Seconds : {}".format(lastTime))

вывод:

python test.py
Seconds : 1592846377.73

Но ожидалось '1592846377729000000'

Ответы [ 2 ]

0 голосов
/ 09 июля 2020

Если у вас есть объект datetime (здесь naive), его легко преобразовать в метку времени наносекунд, потому что метод timestamp возвращает число секунд с плавающей запятой:

ts = int(naive.timestamp() * 1000000) * 1000

Просто вы должны сначала вычислить микросекунды как целое число, чтобы предотвратить неточность с плавающей запятой, чтобы дать неправильное число наносекунд: int(naive.timestamp() * 1000000000) - неточное значение 1592839177729000192.

Кстати, в основном используются наносекундные метки времени в numpy или Pandas. Если вы их используете, вы можете напрямую использовать numpy:

rTime = '2020-06-22T17:19:37.729000Z'
ts = np.int64(np.datetime64(rTime))

, что дает, как и ожидалось, 1592846377729000

0 голосов
/ 09 июля 2020

Я не так конвертирую строку UT C. Почему вы ожидаете такого большого числа? оценка 365 дней * 24 часа * 60 минут * 60 секунд * 50 лет включены в вывод ниже.

from datetime import datetime
rTime = '2020-06-22T17:19:37.729000Z'
# string conversion only works for 6 digit ms,  strip back to 26 chars
print((datetime.strptime(rTime[:26]+"Z", "%Y-%m-%dT%H:%M:%S.%fZ") - datetime(1970,1,1)).total_seconds())
365*24*60*60*50

вывод

1592846377.729
1576800000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...