Различие в дате в минутах в Python

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

https://bitbucket.org/stackless-dev/stacklessexamples/src/a01959c240e2aeae068e56b86b4c2a84a8d854e0 / examples /? at = default

, поэтому я изменил код рекурсивного сложения так, чтобы он выглядел следующим образом

import stackless


def call_wrapper(f, args, kwargs, result_ch):
    result_ch.send(f(*args, **kwargs))


def call(f, *args, **kwargs):
    result_ch = stackless.channel()
    stackless.tasklet(call_wrapper)(f, args, kwargs, result_ch)
    return result_ch.receive()


def rec_add(n):
    if n <= 1:
        return 1
    return n + call(rec_add, n-1)


print(rec_add(1000000))

Он работает с большим числом, например 1 000 000, я думаю, это своего рода косвенная рекурсия, поскольку функция вызывает другую функцию, которая запускает тасклет, который вызывает саму функцию (или что-то в этом роде).

Теперь мне интересно, действительно ли это предполагаемый способ реализации бесконечной рекурсии в Stackless Python или есть более прямые / прямые способы сделать это? Спасибо.

58
задан Peter Mortensen 4 June 2017 в 11:13
поделиться

4 ответа

from datetime import datetime

fmt = '%Y-%m-%d %H:%M:%S'
d1 = datetime.strptime('2010-01-01 17:31:22', fmt)
d2 = datetime.strptime('2010-01-03 17:31:22', fmt)

print (d2-d1).days * 24 * 60
-14
ответ дан 24 November 2019 в 18:39
поделиться

При попытке найти различие между метками времени, которые находятся в столбцах панд, ответ довольно прост. При необходимости в нем в течение многих дней или секунд затем

# For difference in days:
df['diff_in_days']=(df['timestamp2'] - df['timestamp1']).dt.days
# For difference in seconds
df['diff_in_seconds']=(df['timestamp2'] - df['timestamp1']).dt.seconds

Теперь, минута хитра как dt.minute работы только над datetime64 [не уточнено] dtype., тогда как столбец, сгенерированный от вычитания двух datetimes, имеет формат

AttributeError: 'TimedeltaProperties' object has no attribute 'm8'

Так как упомянутый многими выше для получения фактического значения различия в минуту, которую необходимо сделать:

df['diff_in_min']=df['diff_in_seconds']/60

, Но если просто хотят различие между мелкими частями двух меток времени затем, делают следующий

#convert the timedelta to datetime and then extract minute
df['diff_in_min']=(pd.to_datetime(df['timestamp2']-df['timestamp1'])).dt.minute

, можно также прочитать статью https://docs.python.org/3.4/library/datetime.html и видеть раздел 8.1.2, Вы будете видеть, что атрибуты "только для чтения" являются только секундами, днями и миллисекундами. И это обосновывается, почему мелкая функция не работает непосредственно.

0
ответ дан 24 November 2019 в 18:39
поделиться

Как уже было сказано, вам нужно использовать метод datetime.datetime's strptime:

from datetime import datetime

fmt = '%Y-%m-%d %H:%M:%S'
d1 = datetime.strptime('2010-01-01 17:31:22', fmt)
d2 = datetime.strptime('2010-01-03 17:31:22', fmt)

daysDiff = (d2-d1).days

# convert days to minutes
minutesDiff = daysDiff * 24 * 60

print minutesDiff
0
ответ дан 24 November 2019 в 18:39
поделиться

Используйте datetime.strptime() для разбора в экземплярах времени, затем вычислите разницу, и, наконец, преобразуйте разницу в минуты.

5
ответ дан 24 November 2019 в 18:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: