Как преобразовать целочисленный формат даты в 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

Я думаю, что Питер Хансен прав:)

Я не являюсь носителем английского языка. Просто пытаюсь помочь. Я не совсем понимаю разницу между меткой времени и порядком: (