Создание диапазона дат в Python

Я предпочитаю пример кода «сплинтора», а не «AngelWPF». Их подходы довольно похожи, хотя. Я реализовал прикрепленное поведение CancellableSelectionBehavior, и оно работает так, как рекламируется. Возможно, это было просто, что код в примере сплинтора было легче подключить к моему приложению. Код в прикрепленном поведении AngelWPF содержал ссылки на тип KeyValuePair, который потребовал бы большего изменения кода.

В моем приложении был ComboBox, в котором элементы, отображаемые в DataGrid, основаны на элементе, выбранном в ComboBox. Если пользователь внес изменения в DataGrid, а затем выбрал новый элемент в ComboBox, я бы предложил пользователю сохранить изменения с помощью кнопок Да | Нет | Отмена в качестве параметров. Если они нажали «Отмена», я хотел игнорировать их новый выбор в ComboBox и сохранить старый выбор. Это сработало как победитель!

Для тех, кто пугает, когда видит ссылки на Blend и System.Windows.Interactivity, вам не нужно устанавливать Microsoft Expression Blend. Вы можете скачать Blend SDK для .NET 4 (или Silverlight).

Blend SDK для .NET 4

Blend SDK для Silverlight 4

О да, в моем XAML я действительно использую это как мое объявление пространства имен для Blend в этом примере:

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"

312
задан Thomas Browne 14 June 2009 в 07:03
поделиться

2 ответа

Немного лучше ...

base = datetime.datetime.today()
date_list = [base - datetime.timedelta(days=x) for x in range(numdays)]
407
ответ дан 23 November 2019 в 01:10
поделиться

Вы можете написать функцию генератора, которая возвращает объекты даты, начиная с сегодняшнего дня:

import datetime

def date_generator():
  from_date = datetime.datetime.today()
  while True:
    yield from_date
    from_date = from_date - datetime.timedelta(days=1)

Этот генератор возвращает даты, начиная с сегодняшнего дня и возвращаясь на один день назад вовремя. Вот как взять первые 3 даты:

>>> import itertools
>>> dates = itertools.islice(date_generator(), 3)
>>> list(dates)
[datetime.datetime(2009, 6, 14, 19, 12, 21, 703890), datetime.datetime(2009, 6, 13, 19, 12, 21, 703890), datetime.datetime(2009, 6, 12, 19, 12, 21, 703890)]

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

Редактировать

Более компактная версия с использованием выражение генератора вместо функции:

date_generator = (datetime.datetime.today() - datetime.timedelta(days=i) for i in itertools.count())

Использование:

>>> dates = itertools.islice(date_generator, 3)
>>> list(dates)
[datetime.datetime(2009, 6, 15, 1, 32, 37, 286765), datetime.datetime(2009, 6, 14, 1, 32, 37, 286836), datetime.datetime(2009, 6, 13, 1, 32, 37, 286859)]
42
ответ дан 23 November 2019 в 01:10
поделиться
Другие вопросы по тегам:

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