Что означает это значение метки времени?Как конвертировать его в считанные секунды, используя Python? - PullRequest
0 голосов
/ 26 октября 2018

Я новичок в Python (Использование версии 2.7). Я пытаюсь принять данные мобильного датчика в формате Json через скрипт Python. Скрипт хранит данные в текстовом файле. Следующее является частью моих данных Json.

   {"sensor":"Accelerometer","time":1540532851987,"dataZ":"8.2821044921875"}
  {"sensor":"Accelerometer","time":1540532852088,"dataZ":"8.162399291992188"}
  {"sensor":"Accelerometer","time":1540532852191,"dataZ":"9.026702880859375"}

Не могу понять значение значения "время":. Как я могу преобразовать его в обычное время? Я пробовал следующее

import json
import datetime
with open("acc.json") as data_file:

my_dict = [json.loads(line) for line in data_file]

for acce in my_dict:
    date_time_str = str(acce['time']) 
    date_time_obj = datetime.datetime.strptime(date_time_str, '%Y-%m-%d %H:%M: %S.%f')
print('Date:', date_time_obj.date())  
print('Time:', date_time_obj.time())  
print('Date-time:', date_time_obj)  
##print(datetime.datetime.utcfromtimestamp(acce['time']).strftime('%Y-%m-%d %H:%M:%S'))

Что дает мне ошибку

 $python mytest4.py

File "mytest4.py", line 11, in <module>
date_time_obj = datetime.datetime.strptime(date_time_str, '%Y-%m-%d %H:%M:
%S.%f')
File "/usr/lib/python2.7/_strptime.py", line 325, in _strptime
(data_string, format))
ValueError: time data '1540532851987' does not match format '%Y-%m-%d 
%H:%M:%S.%f'

EDIT: Ни одна из упомянутых тем не касается следующего вместе 1. Несколько временных меток, полученных в виде объекта Json в формате UTC. 2. Формат содержит 13 цифр, в отличие от примеров, обсуждаемых с меньшее количество цифр. 3. Найден поток на основе object_hook , но он слишком сложный для меня.

Наконец-то я смог потренироваться с частичной помощью другого потока.

Я передаю окончательный код здесь на тот случай, если кому-то понадобится.

import json
import datetime
with open("acc.json") as data_file:

    my_dict = [json.loads(line) for line in data_file]

for acce in my_dict:
    epoch_time = str(acce['time']) 
    # get first 10 digits
    leading = str(epoch_time)[0: 10]

    # get last 3 digits
    trailing = str(epoch_time)[-3:]

    # print timestamp with milliseconds
    print datetime.datetime.fromtimestamp(float(leading)).strftime('%m/%d/%Y -- %H:%M:%S.') + ('%s' % int(trailing))

OUTPUT:
     10/26/2018 -- 11:17:31.987
     10/26/2018 -- 11:17:32.88
     10/26/2018 -- 11:17:32.191

1 Ответ

0 голосов
/ 27 октября 2018

Вот мое решение:

import datetime
import json
# {"sensor":"Accelerometer","time":1540532851987,"dataZ":"8.2821044921875"}
# {"sensor":"Accelerometer","time":1540532852088,"dataZ":"8.162399291992188"}
# {"sensor":"Accelerometer","time":1540532852191,"dataZ":"9.026702880859375"}
jsonString = {"sensor":"Accelerometer","time":1540532851987,"dataZ":"8.2821044921875"}
json_data = json.dumps(jsonString)

data = json.loads(json_data)
my_dict = [data]

for item in my_dict:
    rawTime = str(item.get('time'))
    firstHalf = rawTime[:10]
    secondHalf = rawTime[10:]
    formatTime = firstHalf + '.' + secondHalf
    convertedTime = datetime.datetime.fromtimestamp(float(formatTime)).strftime('%c')
    print(convertedTime)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...