У меня есть связанные задачи из двух файлов / поддеревьев Org, где частично совпадает время синхронизации. Это ручной журнал и сгенерированный журнал git commit, см. Ниже.
CLOCK одного поддерева: записи должны быть скорректированы, чтобы удалить время наложения. Другое поддерево считается завершенным, и оно CLOCK: записи не должны корректироваться.
РЕДАКТИРОВАТЬ: Этот вопрос о вычислении новых временных интервалов для устранения любых перекрытий. Любые предложения не нужно анализировать формат файла режима Org. Полезны алгоритмы Python datetime.datetime, как и Emacs Lisp с использованием или без использования функций режима Org.
В Python (более знакомо) или Emacs Lisp (функции Org могут помочь) я хотел бы:
Определите время совпадения, где они
происходят. file1.org будет изменчивым,
интервалы времени file2.org должны быть
считается исправленным / правильным.
Расчет новых временных интервалов для
ЧАСЫ: строки в file1.org
удалить любое перекрытие с
file2.org ЧАСЫ: линии.
записать полученный новый CLOCK: строки
или, по крайней мере, уместно
DateTimes.
Функция удобства Python tsparse преобразует временную метку режима Org в объект python datetime.datetime:
>>> from datetime import datetime, timedelta
>>> def tsparse(timestring): return datetime.strptime(timestring,'%Y-%m-%d %a %H:%M')
>>> tsparse('2008-10-15 Wed 00:45')
datetime.datetime(2008, 10, 15, 0, 45)
Контрольные примеры можно найти ниже. Спасибо за любой алгоритм или предложения по реализации для Python или Emacs Lisp.
Jeff
file1.org , до корректировки:
* Manually Edited Worklog
** DONE Onsite
CLOSED: [2009-09-09 Wed 15:00]
:LOGBOOK:
CLOCK: [2009-09-09 Wed 07:00]--[2009-09-09 Wed 15:00] => 8:00
:END:
** DONE Onsite
CLOSED: [2009-09-10 Wed 15:00]
:LOGBOOK:
CLOCK: [2009-09-10 Thu 08:00]--[2009-09-10 Thu 15:00] => 7:00
:END:
file2.org
* Generated commit log
** DONE Commit 1 :partial:overlap:leading:contained:
CLOSED: [2009-09-09 Tue 10:18]
:LOGBOOK:
CLOCK: [2009-09-09 Wed 06:40]--[2009-09-09 Wed 07:18] => 0:38
CLOCK: [2009-09-09 Wed 10:12]--[2009-09-09 Wed 10:18] => 0:06
:END:
** DONE Commit 2 :contained:overlap:contiguous:
CLOSED: [2009-09-09 Wed 10:20]
:LOGBOOK:
CLOCK: [2009-09-09 Wed 10:18]--[2009-09-09 Wed 10:20] => 0:02
:END:
** DONE Commit 4 :contained:overlap:
CLOSED: [2009-09-10 Wed 09:53]
:LOGBOOK:
CLOCK: [2009-09-10 Wed 09:49]--[2009-09-10 Wed 09:53] => 0:04
:END:
** DONE Commit 5 :partial:overlap:trailing:
CLOSED: [2009-09-10 Wed 15:12]
:LOGBOOK:
CLOCK: [2009-09-10 Wed 14:45]--[2009-09-10 Wed 15:12] => 0:27
:END:
** DONE Commit 6 :partial:overlap:leading:
CLOSED: [2009-09-11 Fri 08:05]
:LOGBOOK:
CLOCK: [2009-09-11 Fri 07:50]--[2009-09-11 Fri 08:05] => 0:15
:END:
** DONE Commit 7 :nonoverlap:
CLOSED: [2009-09-11 Fri 15:55]
:LOGBOOK:
CLOCK: [2009-09-11 Fri 15:25]--[2009-09-11 Fri 15:55] => 0:30
:END:
file1.org , после настроек:
* Manually Edited Worklog
** DONE Onsite
CLOSED: [2009-09-09 Wed 15:00]
:LOGBOOK:
CLOCK: [2009-09-09 Wed 10:20]--[2009-09-09 Wed 14:45] => 4:25
CLOCK: [2009-09-09 Wed 07:18]--[2009-09-09 Wed 10:12] => 2:54
:END:
** DONE Onsite
CLOSED: [2009-09-10 Wed 15:00]
:LOGBOOK:
CLOCK: [2009-09-10 Thu 08:05]--[2009-09-10 Thu 15:00] => 6:55
:END: