Как преобразовать целочисленный формат даты в yyymmdd?
-
26-09-2019 - |
Вопрос
Python и Matlab довольно часто имеют целочисленные представления даты следующим образом:
733828.0 733829.0 733832.0 733833.0 733834.0 733835.0 733836.0 733839.0 733840.0 733841.0
Эти цифры соответствуют некоторым датам в этом году. Ребята, вы знаете, какая функция может преобразовать их обратно в формат Yyyymmdd?
бесконечно благодарен!
Решение
То datetime.datetime
сорт может помочь вам здесь. Следующие работы, если эти значения рассматриваются как целочисленные дни (вы не указываете то, что они есть).
>>> from datetime import datetime
>>> dt = datetime.fromordinal(733828)
>>> dt
datetime.datetime(2010, 2, 25, 0, 0)
>>> dt.strftime('%Y%m%d')
'20100225'
Вы показываете значения как поплавки, а приведенное выше не ведет поплавки. Если вы можете дать более подробную информацию о том, что такое данные (а где б), можно будет дать более полный ответ.
Другие советы
Поскольку пример Питона уже продемонстрирован, вот MatLab One:
>> datestr(733828, 'yyyymmdd')
ans =
20090224
Кроме того, обратите внимание, что, выглядя подобным, это на самом деле разные вещи в Matlab и Python:
Matlab.
Номер серийного даты представляет собой целое и дробное количество дней с определенной даты и времени, гдеdatenum('Jan-1-0000 00:00:00')
Возвращает номер 1. (год 0000 - это просто контрольная точка и не предназначена для интерпретации как реальный год вовремя.)Питон,
datetime.date.fromordinal
Верните дату, соответствующую проливочному григорианскому порядкому, где 1 января года 1 имеет порядковую 1.
Таким образом, они будут отличаться на 366 дней, что, по-видимому, продолжительностью года 0.
Даты типа 733828.0 - это даты Rata Dity, считаются с 1 января 1 AD (и десятичная доля дней). Они могут быть UTC или на ваш часовой пояс.
Джулианские даты, используемые в основном астрономами, считают дни (и десятичную долю дней) с 1 января 4713 гг. Гринвич Нун. Дата Джулиана часто путают природонарному дату, которая является подсчетом даты с 1 января текущего года (2 февраля = природовой день 33).
Таким образом, dateTime называет эти вещи порядковыми датами, но я думаю, что это только имеет смысл локально, в мире Python.
733828,0 метеотехника? Если это так, вы можете сделать следующее:
import datetime as dt
dt.date.fromtimestamp(733828.0).strftime('%Y%m%d')
PS.
Я думаю, что Питер Хансен прав :)
Я не родной английский докладчик. Просто пытаюсь помочь. Я не совсем знаю разницу между временем времени и порядковым :(