Преобразование времени UNIX в человеческое время в MATLAB?

842
Mathmath

У меня есть последовательность меток времени UNIX в миллисекундах (например, 1491009470000). Я хочу преобразовать их в человеческое время в формате год-месяц-дата-час-минута-секунда (или в массиве этих компонентов). Следуя https://fr.mathworks.com/help/matlab/ref/datestr.html#inputarg_DateNumber, я попробовал datestr: dt = datestr (1491009470000, «мммм дд, гггг ЧЧ: ММ: СС»), только чтобы получить ошибка:

Ошибка при использовании dateformverify (строка 28) DATESTR не удалось преобразовать число даты в вектор даты. Ошибка в datestr (строка 194) S = dateformverify (dtnumber, dateformstr, islocal); Причина: ошибка при использовании datevecmx Номер даты вне диапазона.

К сожалению, у datevecmx нет документации в MATLAB 2014a.

Однако datestr (теперь «mmmm dd, yyyy HH: MM: SS.FFF AM») дает нам именно то, что нам нужно. Итак, как мне получить datestr (или любую другую команду MATLAB), чтобы дать нам человеческое время? Заранее спасибо!

0
Unix EPOCH - это количество секунд с 1 января 1970 года, поэтому к этому числу необходимо добавить datenum ('1970', 'yyyy') MLtime = datenum ('1970', 'yyyy') + 1491009470000; datestr ожидает число в секундах, а не мс, поэтому сначала разделите его на 1000 и используйте полученное число в качестве параметра. arana 6 лет назад 1
@arana: я попробовал следующее, но получил неожиданные результаты: epoch = datenum ('1970', 'yyyy'); % времени начала unix >> время = эпоха + 1491009470000; >> время = время / 1000; >> datestr (время) ans = 30-мар-2247 12:41:45 Mathmath 6 лет назад 0
@arana: я тоже пробовал: время = эпоха + 1491009470; >> datestr (время) и = 12 апреля 4215. Проблема в том, что времена с этого года (2017), поэтому я что-то здесь не так. Какую ошибку я делаю? Я думаю, что следовал вашим предложениям. Еще раз спасибо! Mathmath 6 лет назад 0
Что вы получаете по datestr (1491009470)? arana 6 лет назад 0
@arana: здесь: datestr (1491009470) и 10 апреля-2245 Mathmath 6 лет назад 0
Онлайн-инструмент для конвертации показывает, что 1491009470 - это 31.03.2017, 18:17:50, поэтому ваш номер уже включает эпоху 1970 года, в этом случае просто используйте его так: time = 1491009470000/1000; datestr (время), которое должно дать вам то, что вы ожидаете. arana 6 лет назад 0
@arana: сделал это, но datestr (1491009470000/1000 = 1491009470) дает мне 10 апреля 2245 года, невозможный год, без часов-минут-секунд. Mathmath 6 лет назад 0
Вы не добавили, «мммм дд, гггг ЧЧ: ММ: СС»), но в любом случае год просто неправильный, у меня нет идей, проверьте это, это может помочь вам https: //www.mathworks. ком / matlabcentral / диктор / view_thread / 285598 arana 6 лет назад 1

0 ответов на вопрос

Похожие вопросы