преобразовать ггггммдд в серийный номер питона - PullRequest
0 голосов
/ 28 февраля 2019

Как мне преобразовать список дат в форме ггггммдд в серийный номер?Например, если у меня есть этот список дат:

t = [1898-10-12 06:00,1898-10-12 12:00,1932-09-30 08:00,1932-09-30 00:00]

Как преобразовать каждую дату в серийный номер?В настоящее время я использую команду datetime toordinal (), но каждая дата округляется до одного и того же серийного номера.Как получить одинаковые даты с разным временем, чтобы они были разными числами?

В списке указано время даты datetime.datetime.Я попытался тогда сделать:

thurser = []
for i in range(len(t)):
    thurser.append(t[i].toordinal())

Но я не получаю серийные номера как поплавки.

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

datetime.toordinal() учитывает только часть 'date' объекта datetime, а не время.Так же, как и date.toordinal() - у него есть только часть даты.Первые 2 и последние 2 элемента в вашем списке имеют даты и даты в одну и ту же дату, но в разное время, которое .toordinal игнорирует.Таким образом, .toordinal даст вам одинаковое значение для тех же датированных дат.

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

thurser = []
# assuming t is a list of datetime objects
for d in t:
    delta = d - datetime.datetime(1, 1, 1)
    thurser.append(delta.days + delta.seconds/(24 * 3600))

>>> print(thurser)
[693149.25, 693149.5, 705555.3333333334, 705555.0]

И если вы предпочитаете целые числа вместо чисел с плавающей запятой, используйте секунды вместо дней:

thurser.append(int(delta.total_seconds()))  # total_seconds has microseconds in the float

>>> print(thurser)
[59888095200, 59888116800, 60959980800, 60959952000]

И чтобы вернуть исходные значения во 2-м примере:

>>> [datetime.timedelta(seconds=d) + datetime.datetime(1, 1, 1) for d in thurser]
[datetime.datetime(1898, 10, 12, 6, 0), datetime.datetime(1898, 10, 12, 12, 0),
 datetime.datetime(1932, 9, 30, 8, 0), datetime.datetime(1932, 9, 30, 0, 0)]
>>> _ == t  # compare with original values
True
0 голосов
/ 28 февраля 2019

Дайте мне знать, если мое понимание неверно, я попытался следовать и дал различные числа для каждого значения списка.
Я изменил
t = ['1898-10-12 06:00','1898-10-12 12:00','1932-09-30 08:00','1932-09-30 00:00']
с
t = [datetime.datetime(1898, 10, 12, 6, 0), datetime.datetime(1898, 10, 12, 12, 0), datetime.datetime(1932, 9, 30, 8, 0), datetime.datetime(1932, 9, 30, 0, 0)]
Как упомянуто в комментарии, это список datetime.datetime.
Я рассматриваю общее количество миллисекунд с 1970-01-01 00:00:00 на данную дату, чтобы сгенерировать число.
Таким образом, даты, предшествующие указанной выше дате, дают значения отрицательные.Но разные значения.

t = [datetime.datetime(1898, 10, 12, 6, 0), datetime.datetime(1898, 10, 12, 12, 0), datetime.datetime(1932, 9, 30, 8, 0), datetime.datetime(1932, 9, 30, 0, 0)]
thurser = []
x = []
for i in range(len(t)):
    thurser.append(t[i].toordinal())
    x.append((t[i]-datetime.datetime.utcfromtimestamp(0)).total_seconds() * 1000.0)

print(thurser)
print(x)

вывод:

[693150, 693150, 705556, 705556]
[-2247501600000.0, -2247480000000.0, -1175616000000.0, -1175644800000.0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...