Как преобразовать целочисленный формат даты в ГГГГММДД? - PullRequest
15 голосов
/ 12 апреля 2010

Python и Matlab довольно часто имеют целочисленные представления даты следующим образом:

733828,0 733829,0 733832,0 733833,0 733834,0 733835,0 733836,0 733839,0 733840,0 733841,0

эти цифры соответствуют некоторым датам в этом году. Ребята, вы знаете, какая функция может преобразовать их обратно в формат ГГГГММДД?

спасибо миллион!

Ответы [ 4 ]

17 голосов
/ 12 апреля 2010

datetime.datetime класс может помочь вам здесь. Следующее работает, если эти значения обрабатываются как целые дни (вы не указываете, какие они есть).

>>> from datetime import datetime
>>> dt = datetime.fromordinal(733828)
>>> dt
datetime.datetime(2010, 2, 25, 0, 0)
>>> dt.strftime('%Y%m%d')
'20100225'

Вы показываете значения как числа с плавающей точкой, а вышеприведенные значения не принимают числа с плавающей точкой. Если вы сможете дать более подробную информацию о том, что это за данные (и откуда они), можно будет дать более полный ответ.

15 голосов
/ 12 апреля 2010

Поскольку пример Python уже был продемонстрирован, вот пример с matlab:

>> 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.

5 голосов
/ 21 июня 2012

Даты, такие как 733828.0, являются датами Rata Die, отсчитанными от 1 января, 1 г. н.э. (и десятичной дроби дней). Это могут быть UTC или ваш часовой пояс.

Юлианские даты, используемые в основном астрономами, подсчитывают дни (и десятичную дробь дней) с 1 января 4713 года до н.э. по Гринвичу. Юлианскую дату часто путают с порядковой датой, которая представляет собой число дат с 1 января текущего года (2 февраля = порядковый день 33).

Итак, datetime называет эти вещи порядковыми датами, но я думаю, что это имеет смысл только локально, в мире python.

4 голосов
/ 12 апреля 2010

Является ли 733828.0 меткой времени? Если это так, вы можете сделать следующее:

import datetime as dt
dt.date.fromtimestamp(733828.0).strftime('%Y%m%d')

PS

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

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

...