Как преобразовать целочисленный формат даты в YYYYMMDD?
Python и Matlab нередко имеют целочисленные представления даты следующим образом:
733828,0
733829,0
733832,0
733833,0
733834,0
733835,0
733836,0
733839,0
733840,0
733841,0
эти цифры соответствуют некоторым датам в этом году. Вы знаете, какая функция может преобразовать их в формат YYYYMMDD?
спасибо миллион!
Ответы
Ответ 1
datetime.datetime
класс может помочь вам здесь. Следующие действия, если эти значения рассматриваются как целые дни (вы не укажете, что они собой представляют).
>>> from datetime import datetime
>>> dt = datetime.fromordinal(733828)
>>> dt
datetime.datetime(2010, 2, 25, 0, 0)
>>> dt.strftime('%Y%m%d')
'20100225'
Вы показываете значения как float, и выше не принимает float. Если вы можете дать более подробную информацию о том, что такое данные (и откуда оно), можно будет дать более полный ответ.
Ответ 2
Так как пример Python уже продемонстрирован, вот матлаб:
>> datestr(733828, 'yyyymmdd')
ans =
20090224
Кроме того, обратите внимание, что при поиске похожих данных на самом деле разные вещи в Matlab и Python:
Matlab
Серийный номер даты представляет собой целое и дробное число дней с определенной даты и времени, когда datenum('Jan-1-0000 00:00:00')
возвращается номер 1. (Год 0000 является лишь точкой отсчета и не предназначен который будет интерпретироваться как реальный год.)
Python, datetime.date.fromordinal
Верните дату, соответствующую пролептическому григорианскому порядку, где 1 января года 1 имеет порядковый номер 1.
Таким образом, они будут отличаться на 366 дней, что, по-видимому, является длительностью года 0.
Ответ 3
Даты типа 733828.0 - это даты Rata Die, отсчитываемые с 1 января 1 года A.D. (и десятичная дробь дней). Они могут быть UTC или вашим часовым поясом.
Юлианские даты, используемые в основном астрономами, подсчитывают дни (и десятичную долю дней) с 1 января 4713 года до н.э. в Гринвиче. Джулианская дата часто путается с ординарной датой, которая считается числом с 1 января текущего года (2 февраля = порядковый день 33).
Итак, datetime вызывает эти порядковые даты, но я думаю, что это имеет смысл только локально, в мире python.
Ответ 4
Является ли 733828.0 отметкой времени? Если это так, вы можете сделать следующее:
import datetime as dt
dt.date.fromtimestamp(733828.0).strftime('%Y%m%d')
PS
Я думаю, что Питер Хансен прав:)
Я не являюсь носителем английского языка. Просто пытаюсь помочь. Я не совсем понимаю разницу между меткой времени и порядком: (