Вы можете использовать метод timestamp()
из datetime
класса модуля datetime
. Чтобы это сделать, вам нужно перенести ваши временные метки в ту же эпоху, которую использует timestamp()
, а именно 1970-01-01 (POSIX timestamp) . Для этого добавьте дельту в секундах между 1970-01-01 и 2000-01-01.
Пример:
from datetime import datetime
epoch = datetime(2000, 1, 1).timestamp()
t = 5.89286318e+08
dt = datetime.utcfromtimestamp(epoch + t)
# dt
# datetime.datetime(2018, 9, 3, 9, 38, 38)
Вы можете сделать то же самое, используя модуль time
(хотя я бы предложил использовать datetime
, так как это более удобно):
import time
epoch = time.mktime(time.strptime("2000-01-01", "%Y-%m-%d"))
t = 5.89286318e+08
ts = time.gmtime(epoch + t)
# ts
# time.struct_time(tm_year=2018, tm_mon=9, tm_mday=3, tm_hour=9, tm_min=38, tm_sec=38, tm_wday=0, tm_yday=246, tm_isdst=0)
Относительно части вопроса, которая касается Маскированные numpy массивы, например, вы можете извлечь все немаскированные значения массива следующим образом:
import numpy as np
ts = np.ma.masked_array(data=[5.89286318e+08, 5.89286330e+08, 5.89286342e+08,
6.33450623e+08, 6.33450635e+08, 6.33450647e+08],
mask=False,
fill_value=1e+20)
epoch = datetime(2000, 1, 1).timestamp()
ts_data_datetime = [datetime.utcfromtimestamp(epoch + t) for t in ts.data]
# ts_data_datetime
# [datetime.datetime(2018, 9, 3, 9, 38, 38),
# datetime.datetime(2018, 9, 3, 9, 38, 50),
# datetime.datetime(2018, 9, 3, 9, 39, 2),
# datetime.datetime(2020, 1, 27, 13, 30, 23),
# datetime.datetime(2020, 1, 27, 13, 30, 35),
# datetime.datetime(2020, 1, 27, 13, 30, 47)]