Из чего лучший способ состоит в том, чтобы сделать время “Сегодня” или “Вчера” и время в Python?

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

Ниже приведен пример обнаружения щелчка по отключенному редактированию, помещенному в форму. Вам нужно будет соответствующим образом скорректировать, если правки связаны с другим контейнером, например с панелью.

procedure TForm1.FormClick(Sender: TObject);
var
  Pt: TPoint;
  Wnd: HWND;
  Control: TControl;
begin
  Pt := ScreenToClient(SmallPointToPoint(types.SmallPoint(GetMessagePos)));
  Wnd := ChildWindowFromPoint(Handle, Pt);
  if Handle <> Wnd then begin
    Control := FindControl(Wnd);
    if (Control is TEdit) and not Control.Enabled then
      Control.Enabled := True;
  end;
end;
9
задан Jon Seigel 28 March 2010 в 22:08
поделиться

2 ответа

Библиотека, что мне нравится много, и я вижу, что все больше людей использует, python-dateutil, но к сожалению ни он, ни другой традиционный большой синтаксический анализатор даты и времени, mxDateTime от Egenix не могут проанализировать слово "завтра" несмотря на обе библиотеки, имеющие очень сильные "нечеткие" синтаксические анализаторы.

Единственная библиотека я видел это, может сделать, это - magicdate. Примеры:

>>> import magicdate
>>> magicdate.magicdate('today')
datetime.date(2009, 2, 15)
>>> magicdate.magicdate('tomorrow')
datetime.date(2009, 2, 16)
>>> magicdate.magicdate('yesterday')
datetime.date(2009, 2, 14)

К сожалению, это только возвращает объекты datetime.date, и так не будет включать части времени и не может обработать Ваш пример "Сегодня 15:20".

Так, Вам нужен mxDateTime для этого. Примеры:

>>> import mx.DateTime

>>> mx.DateTime.Parser.DateTimeFromString("Today 3:20 PM")
<mx.DateTime.DateTime object for '2009-02-15 15:20:00.00' at 28faa28>

>>> mx.DateTime.Parser.DateTimeFromString("Tomorrow 5:50 PM")
<mx.DateTime.DateTime object for '2009-02-15 17:50:00.00' at 2a86088>

Править: mxDateTime. Синтаксический анализатор только анализирует время в этих примерах и игнорирует слова "сегодня" и "завтра". Таким образом для этого конкретного случая необходимо использовать комбинацию magicdate, чтобы заставить дату и mxDateTime получать время. Моя рекомендация состоит в том, чтобы просто использовать python-dateutils или mxDateTime и только принять форматы строки, которые они могут проанализировать.


РЕДАКТИРОВАНИЕ 2: Как отмечено в комментариях выглядит, что python-dateutil может теперь обработать нечеткий парсинг. Я также с тех пор обнаружил parsedatetime модуль, который был разработан для использования в Chandler, и это работает с запросами в этом вопросе:

>>> import parsedatetime.parsedatetime as pdt
>>> import parsedatetime.parsedatetime_consts as pdc
>>> c=pdc.Constants()
>>> p=pdt.Calendar(c)
>>> p.parse('Today 3:20 PM')
((2010, 3, 12, 15, 20, 0, 4, 71, -1), 3)
>>> p.parse('Yesterday 11:06 AM')
((2010, 3, 11, 11, 6, 0, 3, 70, -1), 3)

и для ссылки вот текущее время:

>>> import datetime
>>> datetime.datetime.now()
datetime.datetime(2010, 3, 12, 15, 23, 35, 951652)
18
ответ дан 4 December 2019 в 13:05
поделиться

Я еще еще не полностью до скорости на Python, но Ваш вопрос заинтересовал меня, таким образом, я вырыл вокруг немного.

Использование вычитания даты timedelta безусловно наиболее распространенное решение, которое я нашел.

Так как Ваш вопрос спрашивает - ли это единственный способ сделать это, я проверил коды формата strftime, чтобы видеть, могли ли Вы определить свое собственное. К сожалению, нет. Из strftime документации Python:

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

Следующее является списком всех кодов формата, которых требует стандарт C (версия 1989 года)...

Во всяком случае это не категорический ответ, но возможно Он сэкономит время других, лая неправильное дерево.

-2
ответ дан 4 December 2019 в 13:05
поделиться
Другие вопросы по тегам:

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