Преобразовать массив с плавающей точкой в ​​дату и время - PullRequest
0 голосов
/ 02 июля 2018

У меня есть массив

float [130101.34764204, 130101.34764606, 130101.34765007].

Здесь 13 - 2013, 01 - январь, а 01 - день. А десятичная дробь представляет часть дня, т.е. .34764204*24 = 8.34 (8:34 AM). Как преобразовать это в читаемый формат даты и времени 2013-01-01 8:34.

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 02 июля 2018

Вы можете использовать шаблон регулярного выражения, чтобы сделать это. Например, предположим, что l - это список с плавающей точкой:

import re
from datetime import datetime, timedelta

l = [130101.34764204, 130101.34764606, 130101.34765007]
DAY = 24*60*60

def to_date(f):
    year, month, day, decimal = list(map(int, re.match('(\d{2})(\d{2})(\d{2})\.(\d+)', "{:.8f}".format(f)).groups(1)))
    seconds = decimal*DAY / 10**8
    return datetime(2000+year, month, day) + timedelta(seconds=seconds)
converted_l = map(to_date, l)

Результат:

for c in converted_l:
    print(c)
2013-01-01 08:20:36.272256
2013-01-01 08:20:36.619584
2013-01-01 08:20:36.966048
0 голосов
/ 02 июля 2018

Вы можете использовать strptime и timedelta из модуля datetime напрямую с целым числом и дробной частью чисел:

import datetime as DT

lst = [130101.34764204, 130101.34764606, 130101.34765007]

for l in lst:
    d = int(l)
    t = l - int(l)
    print(DT.datetime.strptime(str(d), '%y%m%d') + DT.timedelta(t))

2013-01-01 08:20:36.272256
2013-01-01 08:20:36.619585
2013-01-01 08:20:36.966048
0 голосов
/ 02 июля 2018

Как то так ...

import datetime


def convert_ts(ts):
    ymd, day_part = divmod(ts, 1)
    y, md = divmod(ymd, 10000)
    m, d = divmod(md, 100)
    day_part_secs = day_part * 86400
    return datetime.datetime(int(2000 + y), int(m), int(d)) + datetime.timedelta(seconds=day_part_secs)

Тестовый код:

for ts in [
    130101.34764204,
    130101.34764606,
    130101.34765007,
    180702.4,
]:
    print(ts, convert_ts(ts))

Выход:

130101.34764204 2013-01-01 08:20:36.272256
130101.34764606 2013-01-01 08:20:36.619585
130101.34765007 2013-01-01 08:20:36.966048
180702.4 2018-07-02 09:35:59.999999
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...