Я хочу создать список дат, начиная с сегодняшнего дня и заканчивая произвольным числом дней, скажем, в моем примере 100 дней. Есть ли лучший способ сделать это, чем это?
import datetime
a = datetime.datetime.today()
numdays = 100
dateList = []
for x in range (0, numdays):
dateList.append(a - datetime.timedelta(days = x))
print dateList
range(0, numdays)
в этом случае?datetimes = [start + timedelta(seconds=x*60+randint(-30, 30)) for x in range (0, range_end*5, 5)]
где переменнаяrange_end = 10
Pandas
отлично подходит для временных рядов в целом и имеет прямую поддержку диапазонов дат.Например
pd.date_range()
:У этого также есть много вариантов, чтобы сделать жизнь легче. Например, если вы хотите только будние дни, вы просто должны поменяться
bdate_range
.Смотрите документацию по диапазону дат
Кроме того, он полностью поддерживает часовые пояса Pytz и может плавно охватывать смену летнего и весеннего времени.
РЕДАКТИРОВАТЬ ОП:
Если вам нужны реальные даты Python, а не Pandas:
Это использует параметр "end", чтобы соответствовать исходному вопросу, но если вы хотите, чтобы даты по убыванию:
источник
list(map(pd.Timestamp.to_pydatetime, datelist))
вернуть тип datetime ...pandas.datetime
Класс является устаревшим и будет удален из панда в версии будущего. Импортируйте изdatetime
модуля вместо.Получить диапазон дат между указанной датой начала и окончания (оптимизировано для сложности времени и пространства):
источник
(end-start+1)
не работает, вы не можете добавить timedelta и int. Вы могли бы использовать(end-start).days + 1
хотя.Вы можете написать функцию генератора, которая возвращает объекты даты начиная с сегодняшнего дня:
Этот генератор возвращает даты, начиная с сегодняшнего дня и возвращаясь назад, один день за раз. Вот как взять первые 3 свидания:
Преимущество этого подхода по сравнению с пониманием цикла или списка состоит в том, что вы можете возвращаться столько раз, сколько захотите.
редактировать
Более компактная версия, использующая выражение генератора вместо функции:
Применение:
источник
да, заново изобретать колесо .... просто поищите на форуме и вы получите что-то вроде этого:
источник
dateutil.rrule
реализует iCalendar RFC - проще использовать функции с четко определенным поведением вместо нескольких реализаций с почти одинаковыми функциями, которые когда-либо немного различаются.dateutil.rrule
позволяет ограничить исправление ошибок одним местом.rrule
имя не является произвольным; это от соответствующего RFCВы также можете использовать порядковый номер дня, чтобы упростить его:
Или, как предложено в комментариях, вы можете создать список следующим образом:
источник
Из заголовка этого вопроса я ожидал найти что-то вроде этого
range()
, которое позволило бы мне указать две даты и создать список со всеми датами между ними. Таким образом, не нужно рассчитывать количество дней между этими двумя датами, если вы не знаете это заранее.Так что с риском быть немного не по теме, этот однострочный делает свою работу:
Все кредиты на этот ответ !
источник
Вот немного другой ответ, основанный на ответе С.Лотта, который дает список дат между двумя датами
start
иend
. В приведенном ниже примере с начала 2017 года по сегодняшний день.источник
Немного поздний ответ, который я знаю, но у меня была та же проблема, и я решил, что внутренней функции диапазона Python в этом отношении немного не хватает, поэтому я переопределил ее в своем модуле утилит.
источник
output = []
и поменять местами вwhile cmp(...)
цикле. Сравнитеrange(0,10,1)
и_range(0,10,1)
.date_range
.Исходя из ответов, я написал для себя это:
Вывод:
Разница в том, что я получаю
date
объект, а не объектdatetime.datetime
.источник
Если есть две даты, и вам нужен диапазон, попробуйте
источник
Вот суть, которую я создал из своего собственного кода, это может помочь. (Я знаю, что вопрос слишком старый, но другие могут его использовать)
https://gist.github.com/2287345
(то же самое ниже)
источник
Вот одна строка для bash-скриптов, чтобы получить список рабочих дней, это python 3. Легко изменяемый для чего угодно, int в конце - это количество дней в прошлом, которое вы хотите.
Вот вариант для предоставления даты начала (или, скорее, конца)
Вот вариант для произвольных дат начала и окончания. не то, чтобы это не очень эффективно, но хорошо для включения цикла for в скрипте bash:
источник
Matplotlib связанных
источник
Я знаю, что на это ответили, но я запишу свой ответ в исторических целях, и, поскольку я думаю, что это прямо.
Конечно, это не выиграет ничего, как Code-Golf, но я думаю, что это элегантно.
источник
arange
with довольно удобна, ноlistOfDates
состоит из numy datetime64 вместо собственных python datetime.np.arange(…).astype(dt.datetime)
дляarange
возврата нативного python datetime вместо numpy datetime64.Еще один пример, который считает вперед или назад, начиная с ответа Сандипа.
дает
а также
дает
Обратите внимание, что начальная дата включена в возвращение, поэтому, если вы хотите четыре итоговых даты, используйте
timedelta(days=3)
источник
источник
Ежемесячный генератор диапазонов дат с
datetime
иdateutil
. Просто и легко понять:источник
источник
end
должно бытьbase - datetime.timedelta
. Более того ... Почему это решение лучше оригинального?Из приведенных выше ответов я создал этот пример для генератора даты
источник